56. LINQ

The LINQ module implements LINQ (Language Integrated Query) capabilities in Daslang.

All functions and symbols are in “linq” module, use require to get access to it.

require daslib/linq

56.1. Sorting data

reverse_inplace(buffer: array<auto(TT)>) : auto()

Reverses an array in place

Arguments
  • buffer : array<auto(TT)>

reverse(a: array<auto(TT)>) : array<TT>()

Reverses an array

Arguments
  • a : array<auto(TT)>

reverse(a: iterator<auto(TT)>) : iterator<TT>()

Reverses an iterator

Arguments
  • a : iterator<auto(TT)>

reverse_to_array(a: iterator<auto(TT)>) : array<TT>()

Reverses an iterator and returns an array

Arguments
  • a : iterator<auto(TT)>

order_inplace(buffer: array<auto(TT)>) : auto()

Sorts an array in place

Arguments
  • buffer : array<auto(TT)>

order(a: iterator<auto(TT)>) : iterator<TT>()

Sorts an iterator

Arguments
  • a : iterator<auto(TT)>

order(arr: array<auto(TT)>) : array<TT>()

Sorts an array

Arguments
  • arr : array<auto(TT)>

order_to_array(a: iterator<auto(TT)>) : array<TT>()

Sorts an iterator and returns an array

Arguments
  • a : iterator<auto(TT)>

order_inplace(buffer: array<auto(TT)>; fun: block<(v1:TT;v2:TT):bool>) : auto()

Sorts an array in place

Arguments
  • buffer : array<auto(TT)>

  • fun : block<(v1:TT;v2:TT):bool>

order(a: iterator<auto(TT)>; fun: block<(v1:TT;v2:TT):bool>) : iterator<TT>()

Sorts an iterator

Arguments
  • a : iterator<auto(TT)>

  • fun : block<(v1:TT;v2:TT):bool>

order(a: array<auto(TT)>; fun: block<(v1:TT;v2:TT):bool>) : array<TT>()

Sorts an array

Arguments
  • a : array<auto(TT)>

  • fun : block<(v1:TT;v2:TT):bool>

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>

order_descending_inplace(buffer: array<auto(TT)>; fun: block<(v1:TT;v2:TT):bool>) : auto()

Sorts an array in descending order in place

Arguments
  • buffer : array<auto(TT)>

  • fun : block<(v1:TT;v2:TT):bool>

order_descending(a: iterator<auto(TT)>; fun: block<(v1:TT;v2:TT):bool>) : iterator<TT>()

Sorts an iterator in descending order

Arguments
  • a : iterator<auto(TT)>

  • fun : block<(v1:TT;v2:TT):bool>

order_descending(a: array<auto(TT)>; fun: block<(v1:TT;v2:TT):bool>) : array<TT>()

Sorts an array in descending order

Arguments
  • a : array<auto(TT)>

  • fun : block<(v1:TT;v2:TT):bool>

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>

order_by_inplace(buffer: array<auto(TT)>; key: auto) : auto()

Sorts an array in place

Arguments
  • buffer : array<auto(TT)>

  • key : auto

order_by(a: iterator<auto(TT)>; key: auto) : iterator<TT>()

Sorts an iterator

Arguments
  • a : iterator<auto(TT)>

  • key : auto

order_by(a: array<auto(TT)>; key: auto) : array<TT>()

Sorts an array

Arguments
  • a : array<auto(TT)>

  • key : auto

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

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

order_by_descending(a: iterator<auto(TT)>; key: auto) : iterator<TT>()

Sorts an iterator in descending order

Arguments
  • a : iterator<auto(TT)>

  • key : auto

order_by_descending(a: array<auto(TT)>; key: auto) : array<TT>()

Sorts an array in descending order

Arguments
  • a : array<auto(TT)>

  • key : auto

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

order_unique_folded(a: array<auto(TT)>) : array<TT>()

sort and remove duplicate elements from an array

Arguments
  • a : array<auto(TT)>

order_unique_folded(a: iterator<auto(TT)>) : array<TT>()

sort and remove duplicate elements from an iterator

Arguments
  • a : iterator<auto(TT)>

order_unique_folded_inplace(a: array<auto(TT)>) : auto()

sort and remove duplicate elements from an array

Arguments
  • a : array<auto(TT)>

56.2. Set operations

unique_key(a: auto) : auto()

generates unique key of workhorse type for the value

Arguments
  • a : auto

distinct(a: array<auto(TT)>) : array<TT>()

Returns distinct elements from an array

Arguments
  • a : array<auto(TT)>

distinct_to_array(a: iterator<auto(TT)>) : array<TT>()

Returns distinct elements from an iterator and returns an array

Arguments
  • a : iterator<auto(TT)>

distinct_inplace(a: array<auto(TT)>) : auto()

Returns distinct elements from an array in place

Arguments
  • a : array<auto(TT)>

distinct(a: iterator<auto(TT)>) : iterator<TT>()

Returns distinct elements from an iterator

Arguments
  • a : iterator<auto(TT)>

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>

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>

distinct_by(a: iterator<auto(TT)>; key: block<(arg:TT):auto>) : iterator<TT>()

Returns distinct elements from an iterator based on a key

Arguments
  • a : iterator<auto(TT)>

  • key : block<(arg:TT):auto>

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>

unique(a: iterator<auto(TT)>) : iterator<TT>()

sort and remove duplicate elements from an iterator

Arguments
  • a : iterator<auto(TT)>

unique(a: array<auto(TT)>) : array<TT>()

sort and remove duplicate elements from an array

Arguments
  • a : array<auto(TT)>

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)>

unique_inplace(a: array<auto(TT)>) : auto()

remove duplicate elements from sorted array in place

Arguments
  • a : array<auto(TT)>

unique_by(a: iterator<auto(TT)>; key: block<(arg:TT):auto>) : iterator<TT>()

sort and remove duplicate elements from an iterator based on a key

Arguments
  • a : iterator<auto(TT)>

  • key : block<(arg:TT):auto>

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>

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>

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>

union(srca: array<auto(TT)>; srcb: array<auto(TT)>) : array<TT>()

Returns distinct elements from the concatenation of two arrays

Arguments
  • srca : array<auto(TT)>

  • srcb : array<auto(TT)>

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)>

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)>

union_by(srca: iterator<auto(TT)>; srcb: iterator<auto(TT)>; key: block<(arg:TT):auto>) : iterator<TT>()

Returns distinct elements from the concatenation of two iterators by key

Arguments
  • srca : iterator<auto(TT)>

  • srcb : iterator<auto(TT)>

  • key : block<(arg:TT):auto>

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>

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>

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)>

except(src: array<auto(TT)>; exclude: array<auto(TT)>) : array<TT>()

Returns elements from the first array that are not in the second array

Arguments
  • src : array<auto(TT)>

  • exclude : array<auto(TT)>

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)>

except_by(src: iterator<auto(TT)>; exclude: iterator<auto(TT)>; key: block<(arg:TT):auto>) : iterator<TT>()

Returns elements from the first iterator that are not in the second iterator by key

Arguments
  • src : iterator<auto(TT)>

  • exclude : iterator<auto(TT)>

  • key : block<(arg:TT):auto>

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>

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>

intersect(srca: iterator<auto(TT)>; srcb: iterator<auto(TT)>) : iterator<TT>()

Returns elements that are present in both iterators

Arguments
  • srca : iterator<auto(TT)>

  • srcb : iterator<auto(TT)>

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)>

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)>

intersect_by(srca: iterator<auto(TT)>; srcb: iterator<auto(TT)>; key: block<(arg:TT):auto>) : iterator<TT>()

Returns elements that are present in both iterators by key

Arguments
  • srca : iterator<auto(TT)>

  • srcb : iterator<auto(TT)>

  • key : block<(arg:TT):auto>

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>

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>

56.3. Concatenation operations

concat(a: array<auto(TT)>; b: array<auto(TT)>) : array<TT>()

Concatenates two arrays

Arguments
  • a : array<auto(TT)>

  • b : array<auto(TT)>

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)>

concat(a: iterator<auto(TT)>; b: iterator<auto(TT)>) : iterator<TT>()

Concatenates two iterators

Arguments
  • a : iterator<auto(TT)>

  • b : iterator<auto(TT)>

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)>

prepend(arr: array<auto(TT)>; value: TT) : array<TT>()

Prepends a value to the beginning of an array

Arguments
  • arr : array<auto(TT)>

  • value : TT

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

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

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

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

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

append(it: iterator<auto(TT)>; value: TT) : iterator<TT>()

Appends a value to the end of an iterator

Arguments
  • it : iterator<auto(TT)>

  • value : TT

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

56.4. Generation operations

range_sequence(start: int; count: int) : iterator<int>()

Generates a sequence of integers within a specified range

Arguments
  • start : int

  • count : int

empty(typ: auto(TT)) : iterator<TT>()

Returns an empty iterator of the specified type

Arguments
  • typ : auto(TT)

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)>

repeat(element: auto(TT); count: int) : iterator<TT>()

Generates a sequence that contains one repeated value

Arguments
  • element : auto(TT)

  • count : int

56.5. Aggregation operations

count(a: iterator<auto(TT)>) : int()

Counts elements in an iterator

Arguments
  • a : iterator<auto(TT)>

count(a: array<auto(TT)>) : int()

Counts elements in an array

Arguments
  • a : array<auto(TT)>

long_count(a: iterator<auto(TT)>) : int64()

Counts elements in an iterator, using a long integer

Arguments
  • a : iterator<auto(TT)>

long_count(a: array<auto(TT)>) : int64()

Counts elements in an array, using a long integer

Arguments
  • a : array<auto(TT)>

min(src: iterator<auto(TT)>) : TT()

Finds the minimum element in an iterator

Arguments
  • src : iterator<auto(TT)>

min(src: array<auto(TT)>) : TT()

Finds the minimum element in an array

Arguments
  • src : array<auto(TT)>

min_by(src: iterator<auto(TT)>; key: auto) : TT()

Finds the minimum element in an iterator by key

Arguments
  • src : iterator<auto(TT)>

  • key : auto

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

max(src: iterator<auto(TT)>) : TT()

Finds the maximum element in an iterator

Arguments
  • src : iterator<auto(TT)>

max(src: array<auto(TT)>) : TT()

Finds the maximum element in an array

Arguments
  • src : array<auto(TT)>

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

max_by(src: array<auto(TT)>; key: auto) : TT()

Finds the maximum element in an array by key

Arguments
  • src : array<auto(TT)>

  • key : auto

min_max(src: iterator<auto(TT)>) : tuple<TT;TT>()

Finds the minimum and maximum elements in an iterator

Arguments
  • src : iterator<auto(TT)>

min_max(src: array<auto(TT)>) : tuple<TT;TT>()

Finds the minimum and maximum elements in an array

Arguments
  • src : array<auto(TT)>

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

min_max_by(src: array<auto(TT)>; key: auto) : tuple<TT;TT>()

Finds the minimum and maximum elements in an array by key

Arguments
  • src : array<auto(TT)>

  • key : auto

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>

aggregate(src: array<auto(TT)>; seed: auto(AGG); func: block<(acc:AGG;x:TT):AGG>) : AGG()

Aggregates elements in an array using a seed and a function

Arguments
  • src : array<auto(TT)>

  • seed : auto(AGG)

  • func : block<(acc:AGG;x:TT):AGG>

sum(src: iterator<auto(TT)>) : TT()

Sums elements in an iterator

Arguments
  • src : iterator<auto(TT)>

sum(src: array<auto(TT)>) : TT()

Sums elements in an array

Arguments
  • src : array<auto(TT)>

average(src: iterator<auto(TT)>) : TT()

Averages elements in an iterator

Arguments
  • src : iterator<auto(TT)>

average(src: array<auto(TT)>) : TT()

Averages elements in an array

Arguments
  • src : array<auto(TT)>

min_max_average(src: iterator<auto(TT)>) : tuple<TT;TT;TT>()

Finds the minimum, maximum, and average elements in an iterator

Arguments
  • src : iterator<auto(TT)>

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)>

min_max_average_by(src: iterator<auto(TT)>; key: auto) : tuple<TT;TT;TT>()

Finds the minimum, maximum, and average elements in an iterator by key

Arguments
  • src : iterator<auto(TT)>

  • key : auto

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

56.6. Filtering data

where_(src: iterator<auto(TT)>; predicate: block<(arg:TT):bool>) : iterator<TT>()

Filters elements in an iterator based on a predicate

Arguments
  • src : iterator<auto(TT)>

  • predicate : block<(arg:TT):bool>

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>

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>

56.7. Partitioning data

skip(arr: array<auto(TT)>; total: int) : array<TT>()

Yields all but the first total elements

Arguments
  • arr : array<auto(TT)>

  • total : int

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

skip(src: iterator<auto(TT)>; total: int) : iterator<TT>()

Yields all but the first total elements

Arguments
  • src : iterator<auto(TT)>

  • total : int

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

skip_while(src: iterator<auto(TT)>; predicate: block<(arg:TT):bool>) : iterator<TT>()

Skips all elements of an iterator while the predicate is true

Arguments
  • src : iterator<auto(TT)>

  • predicate : block<(arg:TT):bool>

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>

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>

take(arr: array<auto(TT)>; total: int) : array<TT>()

Yields only the first total elements

Arguments
  • arr : array<auto(TT)>

  • total : int

take_inplace(arr: array<auto(TT)>; total: int) : auto()

Keeps only the first total elements in an array in place

Arguments
  • arr : array<auto(TT)>

  • total : int

take(src: iterator<auto(TT)>; total: int) : iterator<TT>()

Yields only the first total elements

Arguments
  • src : iterator<auto(TT)>

  • total : int

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

take(src: iterator<auto(TT)>; from: range) : iterator<TT>()

Yields a range of elements from an iterator

Arguments
  • src : iterator<auto(TT)>

  • from : range

take(src: array<auto(TT)>; from: range) : array<TT>()

Yields a range of elements from an array

Arguments
  • src : array<auto(TT)>

  • from : range

take_to_array(src: iterator<auto(TT)>; from: range) : array<TT>()

Yields a range of elements from an iterator and returns an array

Arguments
  • src : iterator<auto(TT)>

  • from : range

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

take_while(src: iterator<auto(TT)>; predicate: block<(arg:TT):bool>) : auto()

Yields only the elements of an iterator while the predicate is true

Arguments
  • src : iterator<auto(TT)>

  • predicate : block<(arg:TT):bool>

take_while(src: array<auto(TT)>; predicate: block<(arg:TT):bool>) : array<TT>()

Yields only the elements of an array while the predicate is true

Arguments
  • src : array<auto(TT)>

  • predicate : block<(arg:TT):bool>

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>

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

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

chunk(src: iterator<auto(TT)>; size: int) : iterator<array<TT>>()

Splits an iterator into chunks of a specified size

Arguments
  • src : iterator<auto(TT)>

  • size : int

56.8. Join and group operations

join(srca: iterator<auto(TA)>; srcb: iterator<auto(TB)>; keya: auto; keyb: auto; result: auto) : iterator<typedecl(result(type<TA>,type<TB>))>()

Joins two iterators based on matching keys (inner join)

Arguments
  • srca : iterator<auto(TA)>

  • srcb : iterator<auto(TB)>

  • keya : auto

  • keyb : auto

  • result : auto

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

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

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

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 -&>>))>()

we pass TA, and sequence of TB to ‘result’

Arguments
  • srca : array<auto(TA)>

  • srcb : array<auto(TB)>

  • keya : auto

  • keyb : auto

  • result : auto

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

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

group_by(source: array<auto(TT)>; key: auto; element_selector: auto; result_selector: auto) : auto()

Groups the elements of an array according to a specified key selector function

Arguments
  • source : array<auto(TT)>

  • key : auto

  • element_selector : auto

  • result_selector : auto

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

56.9. Querying data

any(src: array<auto(TT)>) : bool()

Returns true if the array has at least one element

Arguments
  • src : array<auto(TT)>

any(src: iterator<auto(TT)>) : bool()

Returns true if the iterator has at least one element

Arguments
  • src : iterator<auto(TT)>

any(src: iterator<auto(TT)>; predicate: block<(arg:TT):bool>) : bool()

Returns true if any element in the iterator satisfies the predicate

Arguments
  • src : iterator<auto(TT)>

  • predicate : block<(arg:TT):bool>

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>

all(src: iterator<auto(TT)>; predicate: block<(arg:TT):bool>) : bool()

Returns true if all elements in the iterator satisfy the predicate

Arguments
  • src : iterator<auto(TT)>

  • predicate : block<(arg:TT):bool>

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>

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

contains(src: array<auto(TT)>; element: TT) : bool()

Returns true if the element is present in the array

Arguments
  • src : array<auto(TT)>

  • element : TT

56.10. Element operations

element_at(src: array<auto(TT)>; index: int) : TT()

Returns the element at the specified index

Arguments
  • src : array<auto(TT)>

  • index : int

element_at(src: iterator<auto(TT)>; index: int) : TT()

Returns the element at the specified index

Arguments
  • src : iterator<auto(TT)>

  • index : int

element_at_or_default(src: array<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 : array<auto(TT)>

  • index : int

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

first(src: array<auto(TT)>) : TT()

Returns the first element of an array

Arguments
  • src : array<auto(TT)>

first(src: iterator<auto(TT)>) : TT()

Returns the first element of an iterator

Arguments
  • src : iterator<auto(TT)>

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

first_or_default(src: iterator<auto(TT)>; defaultValue: TT) : TT()

Returns the first element of an iterator, or a default value if the iterator is empty

Arguments
  • src : iterator<auto(TT)>

  • defaultValue : TT

last(src: array<auto(TT)>) : TT()

Returns the last element of an array

Arguments
  • src : array<auto(TT)>

last(src: iterator<auto(TT)>) : TT()

Returns the last element of an iterator

Arguments
  • src : iterator<auto(TT)>

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

last_or_default(src: iterator<auto(TT)>; defaultValue: TT) : TT()

Returns the last element of an iterator, or a default value if the iterator is empty

Arguments
  • src : iterator<auto(TT)>

  • defaultValue : TT

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)>

single(src: iterator<auto(TT)>) : TT()

Returns the only element of an iterator, and throws if there is not exactly one element

Arguments
  • src : iterator<auto(TT)>

single_or_default(src: array<auto(TT)>; defaultValue: TT) : TT()

Returns the only element of an array, or a default value if there is not exactly one element

Arguments
  • src : array<auto(TT)>

  • defaultValue : TT

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

56.11. Transform operations

select(src: iterator<auto(TT)>) : iterator<tuple<int;TT>>()

Projects each element of an iterator into a new form

Arguments
  • src : iterator<auto(TT)>

select(src: array<auto(TT)>) : array<tuple<int;TT>>()

Projects each element of an array into a new form

Arguments
  • src : array<auto(TT)>

select_to_array(src: iterator<auto(TT)>) : array<tuple<int;TT>>()

Projects each element of an iterator into a new form and returns an array

Arguments
  • src : iterator<auto(TT)>

select(src: iterator<auto(TT)>; result_selector: auto) : iterator<typedecl(result_selector(type<TT>))>()

Projects each element of an iterator into a new form using a selector function

Arguments
  • src : iterator<auto(TT)>

  • result_selector : auto

select(src: array<auto(TT)>; result_selector: auto) : array<typedecl(result_selector(type<TT>))>()

Projects each element of an array into a new form using a selector function

Arguments
  • src : array<auto(TT)>

  • result_selector : auto

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

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

select_many(src: array<auto(TT)>; result_selector: auto) : array<typedecl(result_selector(iter_type(type<TT>)))>()

Projects each element of an array to an iterator and flattens the resulting iterators into one array

Arguments
  • src : array<auto(TT)>

  • result_selector : auto

select_many_to_array(src: iterator<auto(TT)>; result_selector: auto) : array<typedecl(result_selector(iter_type(type<TT>)))>()

Projects each element of an iterator to an iterator and flattens the resulting iterators into one array

Arguments
  • src : iterator<auto(TT)>

  • result_selector : auto

select_many(src: iterator<auto(TT)>; collection_selector: auto; result_selector: auto) : iterator<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 iterator

Arguments
  • src : iterator<auto(TT)>

  • collection_selector : auto

  • result_selector : auto

select_many(src: array<auto(TT)>; collection_selector: auto; result_selector: auto) : array<typedecl(result_selector(iter_type(collection_selector(type<TT>))))>()

Projects each element of an array to an iterator and flattens the resulting iterators into one array

Arguments
  • src : array<auto(TT)>

  • collection_selector : auto

  • result_selector : auto

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

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)>

zip(a: array<auto(TT)>; b: array<auto(UU)>) : array<tuple<TT;UU>>()

Merges two arrays into an array of tuples

Arguments
  • a : array<auto(TT)>

  • b : array<auto(UU)>

zip_to_array(a: iterator<auto(TT)>; b: iterator<auto(UU)>) : array<tuple<TT;UU>>()

Merges two iterators into an array of tuples

Arguments
  • a : iterator<auto(TT)>

  • b : iterator<auto(UU)>

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>))>()

Merges two iterators into an iterator by applying a specified function

Arguments
  • a : iterator<auto(TT)>

  • b : iterator<auto(UU)>

  • result_selector : block<(l:TT;r:UU):auto>

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>))>()

Merges two arrays into an array by applying a specified function

Arguments
  • a : array<auto(TT)>

  • b : array<auto(UU)>

  • result_selector : block<(l:TT;r:UU):auto>

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>))>()

Merges two iterators into an array by applying a specified function

Arguments
  • a : iterator<auto(TT)>

  • b : iterator<auto(UU)>

  • result_selector : block<(l:TT;r:UU):auto>

56.12. Convertion operations

to_sequence(a: array<auto(TT)>) : iterator<TT>()

Converts an array to an iterator

Arguments
  • a : array<auto(TT)>

to_sequence_move(a: array<auto(TT)>) : iterator<TT>()

Converts an array to an iterator, captures input

Arguments
  • a : array<auto(TT)>

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>))>()

Converts an iterator to a table

Arguments
  • a : iterator<auto(TT)>

  • key : block<(v:TT):auto>

  • elementSelector : block<(v:TT):auto>

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>

56.13. Comparators and keys

less(a: auto; b: auto) : bool()

Compares two values, returns true if first is less than second

Arguments
  • a : auto

  • b : auto

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)>

less(a: tuple<auto(TT);auto(UU)>; b: tuple<auto(TT);auto(UU)>) : bool()

Compares two tuples, returns true if first is less than second

Arguments
  • a : tuple<auto(TT);auto(UU)>

  • b : tuple<auto(TT);auto(UU)>

less(a: tuple<auto(TT);auto(UU);auto(VV)>; b: tuple<auto(TT);auto(UU);auto(VV)>) : bool()

Compares two tuples, returns true if first is less than second

Arguments
  • a : tuple<auto(TT);auto(UU);auto(VV)>

  • b : tuple<auto(TT);auto(UU);auto(VV)>

less(a: tuple<auto(TT);auto(UU);auto(VV);auto(WW)>; b: tuple<auto(TT);auto(UU);auto(VV);auto(WW)>) : bool()

Compares two tuples, returns true if first is less than second

Arguments
  • a : tuple<auto(TT);auto(UU);auto(VV);auto(WW)>

  • b : tuple<auto(TT);auto(UU);auto(VV);auto(WW)>

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)>

sequence_equal(first: array<auto(TT)>; second: array<auto(TT)>) : bool()

Checks if two arrays are equal

Arguments
  • first : array<auto(TT)>

  • second : array<auto(TT)>

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>

sequence_equal_by(first: array<auto(TT)>; second: array<auto(TT)>; key: block<(arg:TT):auto>) : bool()

Checks if two arrays are equal by key

Arguments
  • first : array<auto(TT)>

  • second : array<auto(TT)>

  • key : block<(arg:TT):auto>