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 LINQ — Language-Integrated Query 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.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.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()