6.3. LINQ
The LINQ module provides query-style operations on sequences: filtering
(where_), projection (select), sorting (order, order_by),
deduplication (distinct), pagination (skip, take), aggregation
(sum, average, aggregate), and element access (first, last).
See also Boost module for LINQ for pipe-syntax macros with underscore shorthand. See tutorial_linq for a hands-on tutorial.
All functions and symbols are in “linq” module, use require to get access to it.
require daslib/linq
Example:
require daslib/linq
[export]
def main() {
var src <- [iterator for (x in range(10)); x]
var evens <- where_(src, $(x : int) : bool { return x % 2 == 0; })
for (v in evens) {
print("{v} ")
}
print("\n")
}
// output:
// 0 2 4 6 8
6.3.1. Sorting data
order (var a: iterator<auto(TT)>; fun: block<(v1:TT;v2:TT):bool>) : iterator<TT>
order (a: array<auto(TT)>; fun: block<(v1:TT;v2:TT):bool>) : array<TT>
order_by (var a: iterator<auto(TT)>; key: auto) : iterator<TT>
order_by_descending (var a: iterator<auto(TT)>; key: auto) : iterator<TT>
order_by_descending (a: array<auto(TT)>; key: auto) : array<TT>
order_by_descending_inplace (var buffer: array<auto(TT)>; key: auto) : auto
order_by_descending_to_array (var a: iterator<auto(TT)>; key: auto) : array<TT>
order_by_inplace (var buffer: array<auto(TT)>; key: auto) : auto
order_by_to_array (var a: iterator<auto(TT)>; key: auto) : array<TT>
order_descending (a: array<auto(TT)>; fun: block<(v1:TT;v2:TT):bool>) : array<TT>
order_descending (var a: iterator<auto(TT)>; fun: block<(v1:TT;v2:TT):bool>) : iterator<TT>
order_descending_inplace (var buffer: array<auto(TT)>) : auto
order_descending_inplace (var buffer: array<auto(TT)>; fun: block<(v1:TT;v2:TT):bool>) : auto
order_descending_to_array (var a: iterator<auto(TT)>; fun: block<(v1:TT;v2:TT):bool>) : array<TT>
order_descending_to_array (var a: iterator<auto(TT)>) : array<TT>
order_inplace (var buffer: array<auto(TT)>; fun: block<(v1:TT;v2:TT):bool>) : auto
order_to_array (var a: iterator<auto(TT)>; fun: block<(v1:TT;v2:TT):bool>) : array<TT>
6.3.1.1. order
- linq.order(a: iterator<auto(TT)>): iterator<TT>
Sorts an iterator
- Arguments:
a : iterator<auto(TT)>
- linq.order(a: iterator<auto(TT)>; fun: block<(v1:TT;v2:TT):bool>): iterator<TT>
- linq.order(a: array<auto(TT)>; fun: block<(v1:TT;v2:TT):bool>): array<TT>
- linq.order(arr: array<auto(TT)>): array<TT>
6.3.1.2. order_by
- linq.order_by(a: array<auto(TT)>; key: auto): array<TT>
Sorts an array
- Arguments:
a : array<auto(TT)>
key : auto
- linq.order_by(a: iterator<auto(TT)>; key: auto): iterator<TT>
6.3.1.3. order_by_descending
- linq.order_by_descending(a: iterator<auto(TT)>; key: auto): iterator<TT>
Sorts an iterator in descending order
- Arguments:
a : iterator<auto(TT)>
key : auto
- linq.order_by_descending(a: array<auto(TT)>; key: auto): array<TT>
- linq.order_by_descending_inplace(buffer: array<auto(TT)>; key: auto): auto
Sorts an array in descending order in place
- Arguments:
buffer : array<auto(TT)>
key : auto
- linq.order_by_descending_to_array(a: iterator<auto(TT)>; key: auto): array<TT>
Sorts an iterator in descending order and returns an array
- Arguments:
a : iterator<auto(TT)>
key : auto
- linq.order_by_inplace(buffer: array<auto(TT)>; key: auto): auto
Sorts an array in place
- Arguments:
buffer : array<auto(TT)>
key : auto
- linq.order_by_to_array(a: iterator<auto(TT)>; key: auto): array<TT>
Sorts an iterator and returns an array
- Arguments:
a : iterator<auto(TT)>
key : auto
6.3.1.4. order_descending
- linq.order_descending(a: iterator<auto(TT)>): iterator<TT>
Sorts an iterator in descending order
- Arguments:
a : iterator<auto(TT)>
- linq.order_descending(a: array<auto(TT)>; fun: block<(v1:TT;v2:TT):bool>): array<TT>
- linq.order_descending(arr: array<auto(TT)>): array<TT>
- linq.order_descending(a: iterator<auto(TT)>; fun: block<(v1:TT;v2:TT):bool>): iterator<TT>
6.3.1.5. order_descending_inplace
- linq.order_descending_inplace(buffer: array<auto(TT)>): auto
Sorts an array in descending order in place
- Arguments:
buffer : array<auto(TT)>
- linq.order_descending_inplace(buffer: array<auto(TT)>; fun: block<(v1:TT;v2:TT):bool>): auto
6.3.1.6. order_descending_to_array
- linq.order_descending_to_array(a: iterator<auto(TT)>; fun: block<(v1:TT;v2:TT):bool>): array<TT>
Sorts an iterator in descending order and returns an array
- Arguments:
a : iterator<auto(TT)>
fun : block<(v1:TT;v2:TT):bool>
- linq.order_descending_to_array(a: iterator<auto(TT)>): array<TT>
6.3.1.7. order_inplace
- linq.order_inplace(buffer: array<auto(TT)>): auto
Sorts an array in place
- Arguments:
buffer : array<auto(TT)>
- linq.order_inplace(buffer: array<auto(TT)>; fun: block<(v1:TT;v2:TT):bool>): auto
6.3.1.8. order_to_array
- linq.order_to_array(a: iterator<auto(TT)>; fun: block<(v1:TT;v2:TT):bool>): array<TT>
Sorts an iterator and returns an array
- Arguments:
a : iterator<auto(TT)>
fun : block<(v1:TT;v2:TT):bool>
- linq.order_to_array(a: iterator<auto(TT)>): array<TT>
6.3.1.9. order_unique_folded
- linq.order_unique_folded(a: iterator<auto(TT)>): array<TT>
sort and remove duplicate elements from an iterator
- Arguments:
a : iterator<auto(TT)>
- linq.order_unique_folded(a: array<auto(TT)>): array<TT>
- linq.order_unique_folded_inplace(a: array<auto(TT)>): auto
sort and remove duplicate elements from an array
- Arguments:
a : array<auto(TT)>
6.3.1.10. reverse
- linq.reverse(a: array<auto(TT)>): array<TT>
Reverses an array
- Arguments:
a : array<auto(TT)>
- linq.reverse(a: iterator<auto(TT)>): iterator<TT>
- linq.reverse_inplace(buffer: array<auto(TT)>): auto
Reverses an array in place
- Arguments:
buffer : array<auto(TT)>
- linq.reverse_to_array(a: iterator<auto(TT)>): array<TT>
Reverses an iterator and returns an array
- Arguments:
a : iterator<auto(TT)>
6.3.2. Set operations
distinct_by (a: array<auto(TT)>; key: block<(arg:TT):auto>) : array<TT>
distinct_by (var a: iterator<auto(TT)>; key: block<(arg:TT):auto>) : iterator<TT>
distinct_by_inplace (var a: array<auto(TT)>; key: block<(arg:TT):auto>) : auto
distinct_by_to_array (var a: iterator<auto(TT)>; key: block<(arg:TT):auto>) : array<TT>
except (var src: iterator<auto(TT)>; var exclude: iterator<auto(TT)>) : iterator<TT>
except (src: array<auto(TT)>; exclude: array<auto(TT)>) : array<TT>
except_by (src: array<auto(TT)>; exclude: array<auto(TT)>; key: block<(arg:TT):auto>) : array<TT>
except_to_array (var src: iterator<auto(TT)>; var exclude: iterator<auto(TT)>) : array<TT>
intersect (srca: array<auto(TT)>; srcb: array<auto(TT)>) : array<TT>
intersect (var srca: iterator<auto(TT)>; var srcb: iterator<auto(TT)>) : iterator<TT>
intersect_by (srca: array<auto(TT)>; srcb: array<auto(TT)>; key: block<(arg:TT):auto>) : array<TT>
intersect_to_array (var srca: iterator<auto(TT)>; var srcb: iterator<auto(TT)>) : array<TT>
union (var srca: iterator<auto(TT)>; var srcb: iterator<auto(TT)>) : iterator<TT>
union (var srca: array<auto(TT)>; var srcb: array<auto(TT)>) : array<TT>
union_by (srca: array<auto(TT)>; srcb: array<auto(TT)>; key: block<(arg:TT):auto>) : array<TT>
union_to_array (var srca: iterator<auto(TT)>; var srcb: iterator<auto(TT)>) : array<TT>
unique_by (a: array<auto(TT)>; key: block<(arg:TT):auto>) : array<TT>
unique_by (a: iterator<auto(TT)>; key: block<(arg:TT):auto>) : iterator<TT>
unique_by_inplace (var a: array<auto(TT)>; key: block<(arg:TT):auto>) : auto
unique_by_to_array (a: iterator<auto(TT)>; key: block<(arg:TT):auto>) : array<TT>
6.3.2.1. distinct
- linq.distinct(a: array<auto(TT)>): array<TT>
Returns distinct elements from an array
- Arguments:
a : array<auto(TT)>
- linq.distinct(a: iterator<auto(TT)>): iterator<TT>
6.3.2.2. distinct_by
- linq.distinct_by(a: array<auto(TT)>; key: block<(arg:TT):auto>): array<TT>
Returns distinct elements from an array based on a key
- Arguments:
a : array<auto(TT)>
key : block<(arg:TT):auto>
- linq.distinct_by(a: iterator<auto(TT)>; key: block<(arg:TT):auto>): iterator<TT>
- linq.distinct_by_inplace(a: array<auto(TT)>; key: block<(arg:TT):auto>): auto
Returns distinct elements from an array based on a key in place
- Arguments:
a : array<auto(TT)>
key : block<(arg:TT):auto>
- linq.distinct_by_to_array(a: iterator<auto(TT)>; key: block<(arg:TT):auto>): array<TT>
Returns distinct elements from an iterator based on a key and returns an array
- Arguments:
a : iterator<auto(TT)>
key : block<(arg:TT):auto>
- linq.distinct_inplace(a: array<auto(TT)>): auto
Returns distinct elements from an array in place
- Arguments:
a : array<auto(TT)>
- linq.distinct_to_array(a: iterator<auto(TT)>): array<TT>
Returns distinct elements from an iterator and returns an array
- Arguments:
a : iterator<auto(TT)>
6.3.2.3. except
- linq.except(src: iterator<auto(TT)>; exclude: iterator<auto(TT)>): iterator<TT>
Returns elements from the first iterator that are not in the second iterator
- Arguments:
src : iterator<auto(TT)>
exclude : iterator<auto(TT)>
- linq.except(src: array<auto(TT)>; exclude: array<auto(TT)>): array<TT>
6.3.2.4. except_by
- linq.except_by(src: array<auto(TT)>; exclude: array<auto(TT)>; key: block<(arg:TT):auto>): array<TT>
Returns elements from the first array that are not in the second array by key
- Arguments:
src : array<auto(TT)>
exclude : array<auto(TT)>
key : block<(arg:TT):auto>
- linq.except_by(src: iterator<auto(TT)>; exclude: iterator<auto(TT)>; key: block<(arg:TT):auto>): iterator<TT>
- linq.except_by_to_array(src: iterator<auto(TT)>; exclude: iterator<auto(TT)>; key: block<(arg:TT):auto>): array<TT>
Returns elements from the first iterator that are not in the second iterator by key and returns an array
- Arguments:
src : iterator<auto(TT)>
exclude : iterator<auto(TT)>
key : block<(arg:TT):auto>
- linq.except_to_array(src: iterator<auto(TT)>; exclude: iterator<auto(TT)>): array<TT>
Returns elements from the first iterator that are not in the second iterator and returns an array
- Arguments:
src : iterator<auto(TT)>
exclude : iterator<auto(TT)>
6.3.2.5. intersect
- linq.intersect(srca: array<auto(TT)>; srcb: array<auto(TT)>): array<TT>
Returns elements that are present in both arrays
- Arguments:
srca : array<auto(TT)>
srcb : array<auto(TT)>
- linq.intersect(srca: iterator<auto(TT)>; srcb: iterator<auto(TT)>): iterator<TT>
6.3.2.6. intersect_by
- linq.intersect_by(srca: array<auto(TT)>; srcb: array<auto(TT)>; key: block<(arg:TT):auto>): array<TT>
Returns elements that are present in both arrays by key
- Arguments:
srca : array<auto(TT)>
srcb : array<auto(TT)>
key : block<(arg:TT):auto>
- linq.intersect_by(srca: iterator<auto(TT)>; srcb: iterator<auto(TT)>; key: block<(arg:TT):auto>): iterator<TT>
- linq.intersect_by_to_array(srca: iterator<auto(TT)>; srcb: iterator<auto(TT)>; key: block<(arg:TT):auto>): array<TT>
Returns elements that are present in both iterators by key and returns an array
- Arguments:
srca : iterator<auto(TT)>
srcb : iterator<auto(TT)>
key : block<(arg:TT):auto>
- linq.intersect_to_array(srca: iterator<auto(TT)>; srcb: iterator<auto(TT)>): array<TT>
Returns elements that are present in both iterators and returns an array
- Arguments:
srca : iterator<auto(TT)>
srcb : iterator<auto(TT)>
6.3.2.7. union
- linq.union(srca: iterator<auto(TT)>; srcb: iterator<auto(TT)>): iterator<TT>
Returns distinct elements from the concatenation of two iterators
- Arguments:
srca : iterator<auto(TT)>
srcb : iterator<auto(TT)>
- linq.union(srca: array<auto(TT)>; srcb: array<auto(TT)>): array<TT>
6.3.2.8. union_by
- linq.union_by(srca: array<auto(TT)>; srcb: array<auto(TT)>; key: block<(arg:TT):auto>): array<TT>
Returns distinct elements from the concatenation of two arrays by key
- Arguments:
srca : array<auto(TT)>
srcb : array<auto(TT)>
key : block<(arg:TT):auto>
- linq.union_by(srca: iterator<auto(TT)>; srcb: iterator<auto(TT)>; key: block<(arg:TT):auto>): iterator<TT>
- linq.union_by_to_array(srca: iterator<auto(TT)>; srcb: iterator<auto(TT)>; key: block<(arg:TT):auto>): array<TT>
Returns distinct elements from the concatenation of two iterators by key and returns an array
- Arguments:
srca : iterator<auto(TT)>
srcb : iterator<auto(TT)>
key : block<(arg:TT):auto>
- linq.union_to_array(srca: iterator<auto(TT)>; srcb: iterator<auto(TT)>): array<TT>
Returns distinct elements from the concatenation of two iterators and returns an array
- Arguments:
srca : iterator<auto(TT)>
srcb : iterator<auto(TT)>
6.3.2.9. unique
- linq.unique(a: array<auto(TT)>): array<TT>
sort and remove duplicate elements from an array
- Arguments:
a : array<auto(TT)>
- linq.unique(a: iterator<auto(TT)>): iterator<TT>
6.3.2.10. unique_by
- linq.unique_by(a: array<auto(TT)>; key: block<(arg:TT):auto>): array<TT>
sort and remove duplicate elements from an array based on a key
- Arguments:
a : array<auto(TT)>
key : block<(arg:TT):auto>
- linq.unique_by(a: iterator<auto(TT)>; key: block<(arg:TT):auto>): iterator<TT>
- linq.unique_by_inplace(a: array<auto(TT)>; key: block<(arg:TT):auto>): auto
remove duplicate elements from an array based on a key in place
- Arguments:
a : array<auto(TT)>
key : block<(arg:TT):auto>
- linq.unique_by_to_array(a: iterator<auto(TT)>; key: block<(arg:TT):auto>): array<TT>
sort and remove duplicate elements from an iterator based on a key and returns an array
- Arguments:
a : iterator<auto(TT)>
key : block<(arg:TT):auto>
- linq.unique_inplace(a: array<auto(TT)>): auto
remove duplicate elements from sorted array in place
- Arguments:
a : array<auto(TT)>
- linq.unique_key(a: auto): auto
generates unique key of workhorse type for the value
- Arguments:
a : auto
- linq.unique_to_array(a: iterator<auto(TT)>): array<TT>
sort and remove duplicate elements from an iterator and returns an array
- Arguments:
a : iterator<auto(TT)>
6.3.3. Concatenation operations
append (var it: iterator<auto(TT)>; value: TT) : iterator<TT>
append_to_array (var it: iterator<auto(TT)>; value: TT) : array<TT>
concat (var a: iterator<auto(TT)>; var b: iterator<auto(TT)>) : iterator<TT>
concat_inplace (var a: array<auto(TT)>; b: array<auto(TT)>) : auto
concat_to_array (var a: iterator<auto(TT)>; var b: iterator<auto(TT)>) : array<TT>
prepend (var it: iterator<auto(TT)>; value: TT) : iterator<TT>
prepend_inplace (var arr: array<auto(TT)>; value: TT) : auto
prepend_to_array (var it: iterator<auto(TT)>; value: TT) : array<TT>
6.3.3.1. append
- linq.append(arr: array<auto(TT)>; value: TT): array<TT>
Appends a value to the end of an array
- Arguments:
arr : array<auto(TT)>
value : TT
- linq.append(it: iterator<auto(TT)>; value: TT): iterator<TT>
- linq.append_inplace(arr: array<auto(TT)>; value: TT): auto
Appends a value to the end of an array in place
- Arguments:
arr : array<auto(TT)>
value : TT
- linq.append_to_array(it: iterator<auto(TT)>; value: TT): array<TT>
Appends a value to the end of an iterator and returns an array
- Arguments:
it : iterator<auto(TT)>
value : TT
6.3.3.2. concat
- linq.concat(a: iterator<auto(TT)>; b: iterator<auto(TT)>): iterator<TT>
Concatenates two iterators
- Arguments:
a : iterator<auto(TT)>
b : iterator<auto(TT)>
- linq.concat(a: array<auto(TT)>; b: array<auto(TT)>): array<TT>
- linq.concat_inplace(a: array<auto(TT)>; b: array<auto(TT)>): auto
Concatenates two arrays in place
- Arguments:
a : array<auto(TT)>
b : array<auto(TT)>
- linq.concat_to_array(a: iterator<auto(TT)>; b: iterator<auto(TT)>): array<TT>
Concatenates two iterators and returns an array
- Arguments:
a : iterator<auto(TT)>
b : iterator<auto(TT)>
6.3.3.3. prepend
- linq.prepend(it: iterator<auto(TT)>; value: TT): iterator<TT>
Prepends a value to the beginning of an iterator
- Arguments:
it : iterator<auto(TT)>
value : TT
- linq.prepend(arr: array<auto(TT)>; value: TT): array<TT>
- linq.prepend_inplace(arr: array<auto(TT)>; value: TT): auto
Prepends a value to the beginning of an array in place
- Arguments:
arr : array<auto(TT)>
value : TT
- linq.prepend_to_array(it: iterator<auto(TT)>; value: TT): array<TT>
Prepends a value to the beginning of an iterator and returns an array
- Arguments:
it : iterator<auto(TT)>
value : TT
6.3.4. Generation operations
- linq.default_empty(src: iterator<auto(TT)>): iterator<TT>
Returns the elements of the iterator, or a default value if the iterator is empty
- Arguments:
src : iterator<auto(TT)>
- linq.empty(typ: auto(TT)): iterator<TT>
Returns an empty iterator of the specified type
- Arguments:
typ : auto(TT)
- linq.range_sequence(start: int; count: int): iterator<int>
Generates a sequence of integers within a specified range
- Arguments:
start : int
count : int
- linq.repeat(element: auto(TT); count: int): iterator<TT>
Generates a sequence that contains one repeated value
- Arguments:
element : auto(TT)
count : int
6.3.5. Aggregation operations
aggregate (var src: iterator<auto(TT)>; seed: auto(AGG); func: block<(acc:AGG;x:TT):AGG>) : AGG
aggregate (src: array<auto(TT)>; seed: auto(AGG); func: block<(acc:AGG;x:TT):AGG>) : AGG
count (a: array<auto(TT)>; predicate: block<(arg:TT):bool>) : int
count (var a: iterator<auto(TT)>; predicate: block<(arg:TT):bool>) : int
min_max_average (var src: iterator<auto(TT)>) : tuple<TT;TT;TT>
min_max_average_by (src: array<auto(TT)>; key: auto) : tuple<TT;TT;TT>
min_max_average_by (var src: iterator<auto(TT)>; key: auto) : tuple<TT;TT;TT>
min_max_by (var src: iterator<auto(TT)>; key: auto) : tuple<TT;TT>
6.3.5.1. aggregate
- linq.aggregate(src: iterator<auto(TT)>; seed: auto(AGG); func: block<(acc:AGG;x:TT):AGG>): AGG
Aggregates elements in an iterator using a seed and a function
- Arguments:
src : iterator<auto(TT)>
seed : auto(AGG)
func : block<(acc:AGG;x:TT):AGG>
- linq.aggregate(src: array<auto(TT)>; seed: auto(AGG); func: block<(acc:AGG;x:TT):AGG>): AGG
6.3.5.2. average
- linq.average(src: array<auto(TT)>): TT
Averages elements in an array
- Arguments:
src : array<auto(TT)>
- linq.average(src: iterator<auto(TT)>): TT
6.3.5.3. count
- linq.count(a: array<auto(TT)>; predicate: block<(arg:TT):bool>): int
Counts elements in an array that satisfy a predicate
- Arguments:
a : array<auto(TT)>
predicate : block<(arg:TT):bool>
- linq.count(a: array<auto(TT)>): int
- linq.count(a: iterator<auto(TT)>): int
- linq.count(a: iterator<auto(TT)>; predicate: block<(arg:TT):bool>): int
6.3.5.4. long_count
- linq.long_count(a: array<auto(TT)>): int64
Counts elements in an array, using a long integer
- Arguments:
a : array<auto(TT)>
- linq.long_count(a: iterator<auto(TT)>): int64
6.3.5.5. max
- linq.max(src: iterator<auto(TT)>): TT
Finds the maximum element in an iterator
- Arguments:
src : iterator<auto(TT)>
- linq.max(src: array<auto(TT)>): TT
6.3.5.6. max_by
- linq.max_by(src: iterator<auto(TT)>; key: auto): TT
Finds the maximum element in an iterator by key
- Arguments:
src : iterator<auto(TT)>
key : auto
- linq.max_by(src: array<auto(TT)>; key: auto): TT
6.3.5.7. min
- linq.min(src: iterator<auto(TT)>): TT
Finds the minimum element in an iterator
- Arguments:
src : iterator<auto(TT)>
- linq.min(src: array<auto(TT)>): TT
6.3.5.8. min_by
- linq.min_by(src: array<auto(TT)>; key: auto): TT
Finds the minimum element in an array by key
- Arguments:
src : array<auto(TT)>
key : auto
- linq.min_by(src: iterator<auto(TT)>; key: auto): TT
6.3.5.9. min_max
- linq.min_max(src: iterator<auto(TT)>): tuple<TT;TT>
Finds the minimum and maximum elements in an iterator
- Arguments:
src : iterator<auto(TT)>
- linq.min_max(src: array<auto(TT)>): tuple<TT;TT>
6.3.5.10. min_max_average
- linq.min_max_average(src: array<auto(TT)>): tuple<TT;TT;TT>
Finds the minimum, maximum, and average elements in an array
- Arguments:
src : array<auto(TT)>
- linq.min_max_average(src: iterator<auto(TT)>): tuple<TT;TT;TT>
6.3.5.11. min_max_average_by
- linq.min_max_average_by(src: array<auto(TT)>; key: auto): tuple<TT;TT;TT>
Finds the minimum, maximum, and average elements in an array by key
- Arguments:
src : array<auto(TT)>
key : auto
- linq.min_max_average_by(src: iterator<auto(TT)>; key: auto): tuple<TT;TT;TT>
6.3.5.12. min_max_by
- linq.min_max_by(src: iterator<auto(TT)>; key: auto): tuple<TT;TT>
Finds the minimum and maximum elements in an iterator by key
- Arguments:
src : iterator<auto(TT)>
key : auto
- linq.min_max_by(src: array<auto(TT)>; key: auto): tuple<TT;TT>
6.3.5.13. sum
- linq.sum(src: array<auto(TT)>): TT
Sums elements in an array
- Arguments:
src : array<auto(TT)>
- linq.sum(src: iterator<auto(TT)>): TT
6.3.6. Filtering data
6.3.6.1. where
- linq.where_(src: array<auto(TT)>; predicate: block<(arg:TT):bool>): array<TT>
Filters elements in an array based on a predicate
- Arguments:
src : array<auto(TT)>
predicate : block<(arg:TT):bool>
- linq.where_(src: iterator<auto(TT)>; predicate: block<(arg:TT):bool>): iterator<TT>
- linq.where_to_array(src: iterator<auto(TT)>; predicate: block<(arg:TT):bool>): array<TT>
Filters elements in an iterator based on a predicate and returns an array
- Arguments:
src : iterator<auto(TT)>
predicate : block<(arg:TT):bool>
6.3.7. Partitioning data
chunk (var src: iterator<auto(TT)>; size: int) : iterator<array<TT>>
chunk_to_array (var src: iterator<auto(TT)>; size: int) : array<array<TT>>
skip (var src: iterator<auto(TT)>; var total: int) : iterator<TT>
skip_inplace (var arr: array<auto(TT)>; var total: int) : auto
skip_last (var src: iterator<auto(TT)>; var total: int) : iterator<TT>
skip_last (arr: array<auto(TT)>; var total: int) : array<TT>
skip_last_inplace (var arr: array<auto(TT)>; var total: int) : auto
skip_last_to_array (var src: iterator<auto(TT)>; var total: int) : array<TT>
skip_to_array (var src: iterator<auto(TT)>; var total: int) : array<TT>
skip_while (src: array<auto(TT)>; predicate: block<(arg:TT):bool>) : array<TT>
skip_while (var src: iterator<auto(TT)>; predicate: block<(arg:TT):bool>) : iterator<TT>
skip_while_to_array (var src: iterator<auto(TT)>; predicate: block<(arg:TT):bool>) : array<TT>
take (var src: iterator<auto(TT)>; from: range) : iterator<TT>
take (var src: iterator<auto(TT)>; var total: int) : iterator<TT>
take_inplace (var arr: array<auto(TT)>; var total: int) : auto
take_last (var src: iterator<auto(TT)>; var total: int) : iterator<TT>
take_last (arr: array<auto(TT)>; var total: int) : array<TT>
take_last_inplace (var arr: array<auto(TT)>; var total: int) : auto
take_last_to_array (var src: iterator<auto(TT)>; var total: int) : array<TT>
take_to_array (var src: iterator<auto(TT)>; var total: int) : array<TT>
take_to_array (var src: iterator<auto(TT)>; from: range) : array<TT>
take_while (var src: iterator<auto(TT)>; predicate: block<(arg:TT):bool>) : iterator<TT>
take_while (src: array<auto(TT)>; predicate: block<(arg:TT):bool>) : array<TT>
take_while_to_array (var src: iterator<auto(TT)>; predicate: block<(arg:TT):bool>) : array<TT>
6.3.7.1. chunk
- linq.chunk(src: array<auto(TT)>; size: int): array<array<TT>>
Splits an array into chunks of a specified size
- Arguments:
src : array<auto(TT)>
size : int
- linq.chunk(src: iterator<auto(TT)>; size: int): iterator<array<TT>>
- linq.chunk_to_array(src: iterator<auto(TT)>; size: int): array<array<TT>>
Splits an iterator into chunks of a specified size and returns an array
- Arguments:
src : iterator<auto(TT)>
size : int
6.3.7.2. skip
- linq.skip(src: iterator<auto(TT)>; total: int): iterator<TT>
Yields all but the first total elements
- Arguments:
src : iterator<auto(TT)>
total : int
- linq.skip(arr: array<auto(TT)>; total: int): array<TT>
- linq.skip_inplace(arr: array<auto(TT)>; total: int): auto
Removes the first total elements from an array in place
- Arguments:
arr : array<auto(TT)>
total : int
6.3.7.3. skip_last
- linq.skip_last(src: iterator<auto(TT)>; total: int): iterator<TT>
Yields all but the last total elements from an iterator
- Arguments:
src : iterator<auto(TT)>
total : int
- linq.skip_last(arr: array<auto(TT)>; total: int): array<TT>
- linq.skip_last_inplace(arr: array<auto(TT)>; total: int): auto
Removes the last total elements from an array in place
- Arguments:
arr : array<auto(TT)>
total : int
- linq.skip_last_to_array(src: iterator<auto(TT)>; total: int): array<TT>
Yields all but the last total elements from an iterator and returns an array
- Arguments:
src : iterator<auto(TT)>
total : int
- linq.skip_to_array(src: iterator<auto(TT)>; total: int): array<TT>
Yields all but the first total elements and returns an array
- Arguments:
src : iterator<auto(TT)>
total : int
6.3.7.4. skip_while
- linq.skip_while(src: array<auto(TT)>; predicate: block<(arg:TT):bool>): array<TT>
Skips all elements of an array while the predicate is true
- Arguments:
src : array<auto(TT)>
predicate : block<(arg:TT):bool>
- linq.skip_while(src: iterator<auto(TT)>; predicate: block<(arg:TT):bool>): iterator<TT>
- linq.skip_while_to_array(src: iterator<auto(TT)>; predicate: block<(arg:TT):bool>): array<TT>
Skips all elements of an iterator while the predicate is true and returns an array
- Arguments:
src : iterator<auto(TT)>
predicate : block<(arg:TT):bool>
6.3.7.5. take
- linq.take(src: array<auto(TT)>; from: range): array<TT>
Yields a range of elements from an array
- Arguments:
src : array<auto(TT)>
from : range
- linq.take(src: iterator<auto(TT)>; from: range): iterator<TT>
- linq.take(src: iterator<auto(TT)>; total: int): iterator<TT>
- linq.take(arr: array<auto(TT)>; total: int): array<TT>
6.3.7.6. take_inplace
- linq.take_inplace(arr: array<auto(TT)>; from: range): auto
Keeps only a range of elements in an array in place
- Arguments:
arr : array<auto(TT)>
from : range
- linq.take_inplace(arr: array<auto(TT)>; total: int): auto
6.3.7.7. take_last
- linq.take_last(src: iterator<auto(TT)>; total: int): iterator<TT>
Yields only the last total elements from an iterator
- Arguments:
src : iterator<auto(TT)>
total : int
- linq.take_last(arr: array<auto(TT)>; total: int): array<TT>
- linq.take_last_inplace(arr: array<auto(TT)>; total: int): auto
Keeps only the last total elements in an array in place
- Arguments:
arr : array<auto(TT)>
total : int
- linq.take_last_to_array(src: iterator<auto(TT)>; total: int): array<TT>
Yields only the last total elements from an iterator and returns an array
- Arguments:
src : iterator<auto(TT)>
total : int
6.3.7.8. take_to_array
- linq.take_to_array(src: iterator<auto(TT)>; total: int): array<TT>
Yields only the first total elements and returns an array
- Arguments:
src : iterator<auto(TT)>
total : int
- linq.take_to_array(src: iterator<auto(TT)>; from: range): array<TT>
6.3.7.9. take_while
- linq.take_while(src: iterator<auto(TT)>; predicate: block<(arg:TT):bool>): iterator<TT>
Yields only the elements of an iterator while the predicate is true
- Arguments:
src : iterator<auto(TT)>
predicate : block<(arg:TT):bool>
- linq.take_while(src: array<auto(TT)>; predicate: block<(arg:TT):bool>): array<TT>
- linq.take_while_to_array(src: iterator<auto(TT)>; predicate: block<(arg:TT):bool>): array<TT>
Yields only the elements of an iterator while the predicate is true and returns an array
- Arguments:
src : iterator<auto(TT)>
predicate : block<(arg:TT):bool>
6.3.8. Join and group operations
6.3.8.1. group_by
- linq.group_by(source: iterator<auto(TT)>; key: auto; element_selector: auto; result_selector: auto): auto
Groups the elements of an iterator according to a specified key selector function
- Arguments:
source : iterator<auto(TT)>
key : auto
element_selector : auto
result_selector : auto
- linq.group_by(source: array<auto(TT)>; key: auto; element_selector: auto; result_selector: auto): auto
- linq.group_by_to_array(source: iterator<auto(TT)>; key: auto; element_selector: auto; result_selector: auto): auto
Groups the elements of an iterator according to a specified key selector function and returns an array
- Arguments:
source : iterator<auto(TT)>
key : auto
element_selector : auto
result_selector : auto
6.3.8.2. group_join
- linq.group_join(srca: iterator<auto(TA)>; srcb: iterator<auto(TB)>; keya: auto; keyb: auto; result: auto) : iterator<typedecl(result(type<TA>, type<array<TB -const -&>>))>
we pass TA, and sequence of TB to ‘result’
- Arguments:
srca : iterator<auto(TA)>
srcb : iterator<auto(TB)>
keya : auto
keyb : auto
result : auto
- linq.group_join(srca: array<auto(TA)>; srcb: array<auto(TB)>; keya: auto; keyb: auto; result: auto) : array<typedecl(result(type<TA>, type<array<TB -const -&>>))>
- linq.group_join_to_array(srca: iterator<auto(TA)>; srcb: iterator<auto(TB)>; keya: auto; keyb: auto; result: auto) : array<typedecl(result(type<TA>, type<array<TB -const -&>>))>
we pass TA, and sequence of TB to ‘result’
- Arguments:
srca : iterator<auto(TA)>
srcb : iterator<auto(TB)>
keya : auto
keyb : auto
result : auto
6.3.8.3. join
- linq.join(srca: array<auto(TA)>; srcb: array<auto(TB)>; keya: auto; keyb: auto; result: auto) : array<typedecl(result(type<TA>, type<TB>))>
Joins two arrays based on matching keys (inner join)
- Arguments:
srca : array<auto(TA)>
srcb : array<auto(TB)>
keya : auto
keyb : auto
result : auto
- linq.join(srca: iterator<auto(TA)>; srcb: iterator<auto(TB)>; keya: auto; keyb: auto; result: auto) : iterator<typedecl(result(type<TA>, type<TB>))>
- linq.join_to_array(srca: iterator<auto(TA)>; srcb: iterator<auto(TB)>; keya: auto; keyb: auto; result: auto) : array<typedecl(result(type<TA>, type<TB>))>
Joins two iterators based on matching keys (inner join) and returns an array
- Arguments:
srca : iterator<auto(TA)>
srcb : iterator<auto(TB)>
keya : auto
keyb : auto
result : auto
6.3.9. Querying data
6.3.9.1. all
- linq.all(src: array<auto(TT)>; predicate: block<(arg:TT):bool>): bool
Returns true if all elements in the array satisfy the predicate
- Arguments:
src : array<auto(TT)>
predicate : block<(arg:TT):bool>
- linq.all(src: iterator<auto(TT)>; predicate: block<(arg:TT):bool>): bool
6.3.9.2. any
- linq.any(src: array<auto(TT)>; predicate: block<(arg:TT):bool>): bool
Returns true if any element in the array satisfies the predicate
- Arguments:
src : array<auto(TT)>
predicate : block<(arg:TT):bool>
- linq.any(src: iterator<auto(TT)>): bool
- linq.any(src: array<auto(TT)>): bool
- linq.any(src: iterator<auto(TT)>; predicate: block<(arg:TT):bool>): bool
6.3.9.3. contains
- linq.contains(src: iterator<auto(TT)>; element: TT): bool
Returns true if the element is present in the iterator
- Arguments:
src : iterator<auto(TT)>
element : TT
- linq.contains(src: array<auto(TT)>; element: TT): bool
6.3.10. Element operations
element_at_or_default (var src: iterator<auto(TT)>; index: int) : TT
element_at_or_default (src: array<auto(TT)>; index: int) : TT
first_or_default (src: array<auto(TT)>; defaultValue: TT) : TT
first_or_default (var src: iterator<auto(TT)>; defaultValue: TT) : TT
last_or_default (src: array<auto(TT)>; defaultValue: TT) : TT
last_or_default (var src: iterator<auto(TT)>; defaultValue: TT) : TT
single_or_default (var src: iterator<auto(TT)>; defaultValue: TT) : TT
single_or_default (src: array<auto(TT)>; defaultValue: TT) : TT
6.3.10.1. element_at
- linq.element_at(src: iterator<auto(TT)>; index: int): TT
Returns the element at the specified index
- Arguments:
src : iterator<auto(TT)>
index : int
- linq.element_at(src: array<auto(TT)>; index: int): TT
6.3.10.2. element_at_or_default
- linq.element_at_or_default(src: iterator<auto(TT)>; index: int): TT
Returns the element at the specified index, or a default value if the index is out of range
- Arguments:
src : iterator<auto(TT)>
index : int
- linq.element_at_or_default(src: array<auto(TT)>; index: int): TT
6.3.10.3. first
- linq.first(src: iterator<auto(TT)>): TT
Returns the first element of an iterator
- Arguments:
src : iterator<auto(TT)>
- linq.first(src: array<auto(TT)>): TT
6.3.10.4. first_or_default
- linq.first_or_default(src: array<auto(TT)>; defaultValue: TT): TT
Returns the first element of an array, or a default value if the array is empty
- Arguments:
src : array<auto(TT)>
defaultValue : TT
- linq.first_or_default(src: iterator<auto(TT)>; defaultValue: TT): TT
6.3.10.5. last
- linq.last(src: iterator<auto(TT)>): TT
Returns the last element of an iterator
- Arguments:
src : iterator<auto(TT)>
- linq.last(src: array<auto(TT)>): TT
6.3.10.6. last_or_default
- linq.last_or_default(src: array<auto(TT)>; defaultValue: TT): TT
Returns the last element of an array, or a default value if the array is empty
- Arguments:
src : array<auto(TT)>
defaultValue : TT
- linq.last_or_default(src: iterator<auto(TT)>; defaultValue: TT): TT
6.3.10.7. single
- linq.single(src: array<auto(TT)>): TT
Returns the only element of an array, and throws if there is not exactly one element
- Arguments:
src : array<auto(TT)>
- linq.single(src: iterator<auto(TT)>): TT
6.3.10.8. single_or_default
- linq.single_or_default(src: iterator<auto(TT)>; defaultValue: TT): TT
Returns the only element of an iterator, or a default value if there is not exactly one element
- Arguments:
src : iterator<auto(TT)>
defaultValue : TT
- linq.single_or_default(src: array<auto(TT)>; defaultValue: TT): TT
6.3.11. Transform operations
select (var src: iterator<auto(TT)>) : iterator<tuple<int;TT>>
select (src: array<auto(TT)>; result_selector: auto) : array<typedecl(result_selector(type<TT>))>
select_to_array (var src: iterator<auto(TT)>) : array<tuple<int;TT>>
zip (var a: iterator<auto(TT)>; var b: iterator<auto(UU)>) : iterator<tuple<TT;UU>>
zip (a: array<auto(TT)>; b: array<auto(UU)>) : array<tuple<TT;UU>>
zip (a: array<auto(TT)>; b: array<auto(UU)>; c: array<auto(WW)>) : array<tuple<TT;UU;WW>>
zip_to_array (var a: iterator<auto(TT)>; var b: iterator<auto(UU)>) : array<tuple<TT;UU>>
6.3.11.1. select
- linq.select(src: array<auto(TT)>): array<tuple<int;TT>>
Projects each element of an array into a new form
- Arguments:
src : array<auto(TT)>
- linq.select(src: iterator<auto(TT)>): iterator<tuple<int;TT>>
- linq.select(src: iterator<auto(TT)>; result_selector: auto) : iterator<typedecl(result_selector(type<TT>))>
- linq.select(src: array<auto(TT)>; result_selector: auto) : array<typedecl(result_selector(type<TT>))>
6.3.11.2. select_many
- linq.select_many(src: iterator<auto(TT)>; result_selector: auto) : iterator<typedecl(result_selector(iter_type(type<TT>)))>
Projects each element of an iterator to an iterator and flattens the resulting iterators into one iterator
- Arguments:
src : iterator<auto(TT)>
result_selector : auto
- linq.select_many(src: array<auto(TT)>; result_selector: auto) : array<typedecl(result_selector(iter_type(type<TT>)))>
- linq.select_many(src: array<auto(TT)>; collection_selector: auto; result_selector: auto) : array<typedecl(result_selector(iter_type(collection_selector(type<TT>))))>
- linq.select_many(src: iterator<auto(TT)>; collection_selector: auto; result_selector: auto) : iterator<typedecl(result_selector(iter_type(collection_selector(type<TT>))))>
6.3.11.3. select_many_to_array
- linq.select_many_to_array(src: iterator<auto(TT)>; collection_selector: auto; result_selector: auto) : array<typedecl(result_selector(iter_type(collection_selector(type<TT>))))>
Projects each element of an iterator to an iterator and flattens the resulting iterators into one array
- Arguments:
src : iterator<auto(TT)>
collection_selector : auto
result_selector : auto
- linq.select_many_to_array(src: iterator<auto(TT)>; result_selector: auto) : array<typedecl(result_selector(iter_type(type<TT>)))>
6.3.11.4. select_to_array
- linq.select_to_array(src: iterator<auto(TT)>; result_selector: auto) : array<typedecl(result_selector(type<TT>))>
Projects each element of an iterator into a new form using a selector function and returns an array
- Arguments:
src : iterator<auto(TT)>
result_selector : auto
- linq.select_to_array(src: iterator<auto(TT)>): array<tuple<int;TT>>
6.3.11.5. zip
- linq.zip(a: iterator<auto(TT)>; b: iterator<auto(UU)>): iterator<tuple<TT;UU>>
Merges two iterators into an iterator of tuples
- Arguments:
a : iterator<auto(TT)>
b : iterator<auto(UU)>
- linq.zip(a: array<auto(TT)>; b: array<auto(UU)>): array<tuple<TT;UU>>
- linq.zip(a: array<auto(TT)>; b: array<auto(UU)>; result_selector: block<(l:TT;r:UU):auto>) : array<typedecl(result_selector(type<TT>, type<UU>))>
- linq.zip(a: iterator<auto(TT)>; b: iterator<auto(UU)>; result_selector: block<(l:TT;r:UU):auto>) : iterator<typedecl(result_selector(type<TT>, type<UU>))>
- linq.zip(a: array<auto(TT)>; b: array<auto(UU)>; c: array<auto(WW)>): array<tuple<TT;UU;WW>>
- linq.zip(a: iterator<auto(TT)>; b: iterator<auto(UU)>; c: iterator<auto(WW)>): iterator<tuple<TT;UU;WW>>
6.3.11.6. zip_to_array
- linq.zip_to_array(a: iterator<auto(TT)>; b: iterator<auto(UU)>; c: iterator<auto(WW)>): array<tuple<TT;UU;WW>>
Merges three iterators into an array of tuples
- Arguments:
a : iterator<auto(TT)>
b : iterator<auto(UU)>
c : iterator<auto(WW)>
- linq.zip_to_array(a: iterator<auto(TT)>; b: iterator<auto(UU)>): array<tuple<TT;UU>>
- linq.zip_to_array(a: iterator<auto(TT)>; b: iterator<auto(UU)>; result_selector: block<(l:TT;r:UU):auto>) : array<typedecl(result_selector(type<TT>, type<UU>))>
6.3.12. Conversion operations
- linq.to_sequence(a: array<auto(TT)>): iterator<TT>
Converts an array to an iterator
- Arguments:
a : array<auto(TT)>
- linq.to_sequence_move(a: array<auto(TT)>): iterator<TT>
Converts an array to an iterator, captures input
- Arguments:
a : array<auto(TT)>
6.3.12.1. to_table
- linq.to_table(a: array<auto(TT)>; key: block<(v:TT):auto>; elementSelector: block<(v:TT):auto>) : table<typedecl(_::unique_key(type<TT>)), typedecl(elementSelector(type<TT>))>
Converts an array to a table
- Arguments:
a : array<auto(TT)>
key : block<(v:TT):auto>
elementSelector : block<(v:TT):auto>
- linq.to_table(a: iterator<auto(TT)>; key: block<(v:TT):auto>; elementSelector: block<(v:TT):auto>) : table<typedecl(_::unique_key(type<TT>)), typedecl(elementSelector(type<TT>))>
6.3.13. Comparators and keys
less (a: tuple<auto(TT);auto(UU);auto(VV)>; b: tuple<auto(TT);auto(UU);auto(VV)>) : bool
less (a: tuple<auto(TT);auto(UU)>; b: tuple<auto(TT);auto(UU)>) : bool
sequence_equal (var first: iterator<auto(TT)>; var second: iterator<auto(TT)>) : bool
sequence_equal (first: array<auto(TT)>; second: array<auto(TT)>) : bool
6.3.13.1. less
- linq.less(a: tuple<auto(TT)>; b: tuple<auto(TT)>): bool
Compares two tuples, returns true if first is less than second
- Arguments:
a : tuple<auto(TT)>
b : tuple<auto(TT)>
- linq.less(a: auto; b: auto): bool
- linq.less(a: tuple<auto(TT);auto(UU);auto(VV)>; b: tuple<auto(TT);auto(UU);auto(VV)>): bool
- linq.less(a: tuple<auto(TT);auto(UU)>; b: tuple<auto(TT);auto(UU)>): bool
- linq.less(a: tuple<auto(TT);auto(UU);auto(VV);auto(WW)>; b: tuple<auto(TT);auto(UU);auto(VV);auto(WW)>): bool
6.3.13.2. sequence_equal
- linq.sequence_equal(first: iterator<auto(TT)>; second: iterator<auto(TT)>): bool
Checks if two sequences are equal
- Arguments:
first : iterator<auto(TT)>
second : iterator<auto(TT)>
- linq.sequence_equal(first: array<auto(TT)>; second: array<auto(TT)>): bool
6.3.13.3. sequence_equal_by
- linq.sequence_equal_by(first: iterator<auto(TT)>; second: iterator<auto(TT)>; key: block<(arg:TT):auto>): bool
Checks if two sequences are equal by key
- Arguments:
first : iterator<auto(TT)>
second : iterator<auto(TT)>
key : block<(arg:TT):auto>
- linq.sequence_equal_by(first: array<auto(TT)>; second: array<auto(TT)>; key: block<(arg:TT):auto>): bool