.. _stdlib_linq: ==== LINQ ==== .. das:module:: 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 :doc:`linq_boost` for pipe-syntax macros with underscore shorthand. See :ref:`tutorial_linq` for a hands-on tutorial. All functions and symbols are in "linq" module, use require to get access to it. .. code-block:: das require daslib/linq Example: .. code-block:: das 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 ++++++++++++ Sorting data ++++++++++++ * :ref:`order (var a: iterator\) : iterator\ ` * :ref:`order (var a: iterator\; fun: block\<(v1:TT;v2:TT):bool\>) : iterator\ ` * :ref:`order (a: array\; fun: block\<(v1:TT;v2:TT):bool\>) : array\ ` * :ref:`order (arr: array\) : array\ ` * :ref:`order_by (a: array\; key: auto) : array\ ` * :ref:`order_by (var a: iterator\; key: auto) : iterator\ ` * :ref:`order_by_descending (var a: iterator\; key: auto) : iterator\ ` * :ref:`order_by_descending (a: array\; key: auto) : array\ ` * :ref:`order_by_descending_inplace (var buffer: array\; key: auto) : auto ` * :ref:`order_by_descending_to_array (var a: iterator\; key: auto) : array\ ` * :ref:`order_by_inplace (var buffer: array\; key: auto) : auto ` * :ref:`order_by_to_array (var a: iterator\; key: auto) : array\ ` * :ref:`order_descending (var a: iterator\) : iterator\ ` * :ref:`order_descending (a: array\; fun: block\<(v1:TT;v2:TT):bool\>) : array\ ` * :ref:`order_descending (arr: array\) : array\ ` * :ref:`order_descending (var a: iterator\; fun: block\<(v1:TT;v2:TT):bool\>) : iterator\ ` * :ref:`order_descending_inplace (var buffer: array\) : auto ` * :ref:`order_descending_inplace (var buffer: array\; fun: block\<(v1:TT;v2:TT):bool\>) : auto ` * :ref:`order_descending_to_array (var a: iterator\; fun: block\<(v1:TT;v2:TT):bool\>) : array\ ` * :ref:`order_descending_to_array (var a: iterator\) : array\ ` * :ref:`order_inplace (var buffer: array\) : auto ` * :ref:`order_inplace (var buffer: array\; fun: block\<(v1:TT;v2:TT):bool\>) : auto ` * :ref:`order_to_array (var a: iterator\; fun: block\<(v1:TT;v2:TT):bool\>) : array\ ` * :ref:`order_to_array (var a: iterator\) : array\ ` * :ref:`order_unique_folded (var a: iterator\) : array\ ` * :ref:`order_unique_folded (var a: array\) : array\ ` * :ref:`order_unique_folded_inplace (var a: array\) : auto ` * :ref:`reverse (a: array\) : array\ ` * :ref:`reverse (var a: iterator\) : iterator\ ` * :ref:`reverse_inplace (var buffer: array\) : auto ` * :ref:`reverse_to_array (var a: iterator\) : array\ ` order ^^^^^ .. _function-linq_order_iterator_ls_autoTT_gr_: .. das:function:: order(a: iterator) : iterator Sorts an iterator :Arguments: * **a** : iterator .. _function-linq_order_iterator_ls_autoTT_gr__block_ls_v1_c_TT;v2_c_TT_c_bool_gr_: .. das:function:: order(a: iterator; fun: block<(v1:TT;v2:TT):bool>) : iterator .. _function-linq_order_array_ls_autoTT_gr__block_ls_v1_c_TT;v2_c_TT_c_bool_gr_: .. das:function:: order(a: array; fun: block<(v1:TT;v2:TT):bool>) : array .. _function-linq_order_array_ls_autoTT_gr_: .. das:function:: order(arr: array) : array ---- order_by ^^^^^^^^ .. _function-linq_order_by_array_ls_autoTT_gr__auto_0x1d1: .. das:function:: order_by(a: array; key: auto) : array Sorts an array :Arguments: * **a** : array * **key** : auto .. _function-linq_order_by_iterator_ls_autoTT_gr__auto_0x1c9: .. das:function:: order_by(a: iterator; key: auto) : iterator ---- order_by_descending ^^^^^^^^^^^^^^^^^^^ .. _function-linq_order_by_descending_iterator_ls_autoTT_gr__auto_0x1e7: .. das:function:: order_by_descending(a: iterator; key: auto) : iterator Sorts an iterator in descending order :Arguments: * **a** : iterator * **key** : auto .. _function-linq_order_by_descending_array_ls_autoTT_gr__auto_0x1ef: .. das:function:: order_by_descending(a: array; key: auto) : array ---- .. _function-linq_order_by_descending_inplace_array_ls_autoTT_gr__auto_0x1e1: .. das:function:: order_by_descending_inplace(buffer: array; key: auto) : auto Sorts an array in descending order in place :Arguments: * **buffer** : array * **key** : auto .. _function-linq_order_by_descending_to_array_iterator_ls_autoTT_gr__auto_0x1f7: .. das:function:: order_by_descending_to_array(a: iterator; key: auto) : array Sorts an iterator in descending order and returns an array :Arguments: * **a** : iterator * **key** : auto .. _function-linq_order_by_inplace_array_ls_autoTT_gr__auto_0x1c3: .. das:function:: order_by_inplace(buffer: array; key: auto) : auto Sorts an array in place :Arguments: * **buffer** : array * **key** : auto .. _function-linq_order_by_to_array_iterator_ls_autoTT_gr__auto_0x1d9: .. das:function:: order_by_to_array(a: iterator; key: auto) : array Sorts an iterator and returns an array :Arguments: * **a** : iterator * **key** : auto order_descending ^^^^^^^^^^^^^^^^ .. _function-linq_order_descending_iterator_ls_autoTT_gr_: .. das:function:: order_descending(a: iterator) : iterator Sorts an iterator in descending order :Arguments: * **a** : iterator .. _function-linq_order_descending_array_ls_autoTT_gr__block_ls_v1_c_TT;v2_c_TT_c_bool_gr_: .. das:function:: order_descending(a: array; fun: block<(v1:TT;v2:TT):bool>) : array .. _function-linq_order_descending_array_ls_autoTT_gr_: .. das:function:: order_descending(arr: array) : array .. _function-linq_order_descending_iterator_ls_autoTT_gr__block_ls_v1_c_TT;v2_c_TT_c_bool_gr_: .. das:function:: order_descending(a: iterator; fun: block<(v1:TT;v2:TT):bool>) : iterator ---- order_descending_inplace ^^^^^^^^^^^^^^^^^^^^^^^^ .. _function-linq_order_descending_inplace_array_ls_autoTT_gr_: .. das:function:: order_descending_inplace(buffer: array) : auto Sorts an array in descending order in place :Arguments: * **buffer** : array .. _function-linq_order_descending_inplace_array_ls_autoTT_gr__block_ls_v1_c_TT;v2_c_TT_c_bool_gr_: .. das:function:: order_descending_inplace(buffer: array; fun: block<(v1:TT;v2:TT):bool>) : auto ---- order_descending_to_array ^^^^^^^^^^^^^^^^^^^^^^^^^ .. _function-linq_order_descending_to_array_iterator_ls_autoTT_gr__block_ls_v1_c_TT;v2_c_TT_c_bool_gr_: .. das:function:: order_descending_to_array(a: iterator; fun: block<(v1:TT;v2:TT):bool>) : array Sorts an iterator in descending order and returns an array :Arguments: * **a** : iterator * **fun** : block<(v1:TT;v2:TT):bool> .. _function-linq_order_descending_to_array_iterator_ls_autoTT_gr_: .. das:function:: order_descending_to_array(a: iterator) : array ---- order_inplace ^^^^^^^^^^^^^ .. _function-linq_order_inplace_array_ls_autoTT_gr_: .. das:function:: order_inplace(buffer: array) : auto Sorts an array in place :Arguments: * **buffer** : array .. _function-linq_order_inplace_array_ls_autoTT_gr__block_ls_v1_c_TT;v2_c_TT_c_bool_gr_: .. das:function:: order_inplace(buffer: array; fun: block<(v1:TT;v2:TT):bool>) : auto ---- order_to_array ^^^^^^^^^^^^^^ .. _function-linq_order_to_array_iterator_ls_autoTT_gr__block_ls_v1_c_TT;v2_c_TT_c_bool_gr_: .. das:function:: order_to_array(a: iterator; fun: block<(v1:TT;v2:TT):bool>) : array Sorts an iterator and returns an array :Arguments: * **a** : iterator * **fun** : block<(v1:TT;v2:TT):bool> .. _function-linq_order_to_array_iterator_ls_autoTT_gr_: .. das:function:: order_to_array(a: iterator) : array ---- order_unique_folded ^^^^^^^^^^^^^^^^^^^ .. _function-linq_order_unique_folded_iterator_ls_autoTT_gr_: .. das:function:: order_unique_folded(a: iterator) : array sort and remove duplicate elements from an iterator :Arguments: * **a** : iterator .. _function-linq_order_unique_folded_array_ls_autoTT_gr_: .. das:function:: order_unique_folded(a: array) : array ---- .. _function-linq_order_unique_folded_inplace_array_ls_autoTT_gr_: .. das:function:: order_unique_folded_inplace(a: array) : auto sort and remove duplicate elements from an array :Arguments: * **a** : array reverse ^^^^^^^ .. _function-linq_reverse_array_ls_autoTT_gr_: .. das:function:: reverse(a: array) : array Reverses an array :Arguments: * **a** : array .. _function-linq_reverse_iterator_ls_autoTT_gr_: .. das:function:: reverse(a: iterator) : iterator ---- .. _function-linq_reverse_inplace_array_ls_autoTT_gr_: .. das:function:: reverse_inplace(buffer: array) : auto Reverses an array in place :Arguments: * **buffer** : array .. _function-linq_reverse_to_array_iterator_ls_autoTT_gr_: .. das:function:: reverse_to_array(a: iterator) : array Reverses an iterator and returns an array :Arguments: * **a** : iterator ++++++++++++++ Set operations ++++++++++++++ * :ref:`distinct (a: array\) : array\ ` * :ref:`distinct (var a: iterator\) : iterator\ ` * :ref:`distinct_by (a: array\; key: block\<(arg:TT):auto\>) : array\ ` * :ref:`distinct_by (var a: iterator\; key: block\<(arg:TT):auto\>) : iterator\ ` * :ref:`distinct_by_inplace (var a: array\; key: block\<(arg:TT):auto\>) : auto ` * :ref:`distinct_by_to_array (var a: iterator\; key: block\<(arg:TT):auto\>) : array\ ` * :ref:`distinct_inplace (var a: array\) : auto ` * :ref:`distinct_to_array (var a: iterator\) : array\ ` * :ref:`except (var src: iterator\; var exclude: iterator\) : iterator\ ` * :ref:`except (src: array\; exclude: array\) : array\ ` * :ref:`except_by (src: array\; exclude: array\; key: block\<(arg:TT):auto\>) : array\ ` * :ref:`except_by (var src: iterator\; var exclude: iterator\; key: block\<(arg:TT):auto\>) : iterator\ ` * :ref:`except_by_to_array (var src: iterator\; var exclude: iterator\; key: block\<(arg:TT):auto\>) : array\ ` * :ref:`except_to_array (var src: iterator\; var exclude: iterator\) : array\ ` * :ref:`intersect (srca: array\; srcb: array\) : array\ ` * :ref:`intersect (var srca: iterator\; var srcb: iterator\) : iterator\ ` * :ref:`intersect_by (srca: array\; srcb: array\; key: block\<(arg:TT):auto\>) : array\ ` * :ref:`intersect_by (var srca: iterator\; var srcb: iterator\; key: block\<(arg:TT):auto\>) : iterator\ ` * :ref:`intersect_by_to_array (var srca: iterator\; var srcb: iterator\; key: block\<(arg:TT):auto\>) : array\ ` * :ref:`intersect_to_array (var srca: iterator\; var srcb: iterator\) : array\ ` * :ref:`union (var srca: iterator\; var srcb: iterator\) : iterator\ ` * :ref:`union (var srca: array\; var srcb: array\) : array\ ` * :ref:`union_by (srca: array\; srcb: array\; key: block\<(arg:TT):auto\>) : array\ ` * :ref:`union_by (var srca: iterator\; var srcb: iterator\; key: block\<(arg:TT):auto\>) : iterator\ ` * :ref:`union_by_to_array (var srca: iterator\; var srcb: iterator\; key: block\<(arg:TT):auto\>) : array\ ` * :ref:`union_to_array (var srca: iterator\; var srcb: iterator\) : array\ ` * :ref:`unique (a: array\) : array\ ` * :ref:`unique (a: iterator\) : iterator\ ` * :ref:`unique_by (a: array\; key: block\<(arg:TT):auto\>) : array\ ` * :ref:`unique_by (a: iterator\; key: block\<(arg:TT):auto\>) : iterator\ ` * :ref:`unique_by_inplace (var a: array\; key: block\<(arg:TT):auto\>) : auto ` * :ref:`unique_by_to_array (a: iterator\; key: block\<(arg:TT):auto\>) : array\ ` * :ref:`unique_inplace (var a: array\) : auto ` * :ref:`unique_key (a: auto) : auto ` * :ref:`unique_to_array (a: iterator\) : array\ ` distinct ^^^^^^^^ .. _function-linq_distinct_array_ls_autoTT_gr_: .. das:function:: distinct(a: array) : array Returns distinct elements from an array :Arguments: * **a** : array .. _function-linq_distinct_iterator_ls_autoTT_gr_: .. das:function:: distinct(a: iterator) : iterator ---- distinct_by ^^^^^^^^^^^ .. _function-linq_distinct_by_array_ls_autoTT_gr__block_ls_arg_c_TT_c_auto_gr_: .. das:function:: distinct_by(a: array; key: block<(arg:TT):auto>) : array Returns distinct elements from an array based on a key :Arguments: * **a** : array * **key** : block<(arg:TT):auto> .. _function-linq_distinct_by_iterator_ls_autoTT_gr__block_ls_arg_c_TT_c_auto_gr_: .. das:function:: distinct_by(a: iterator; key: block<(arg:TT):auto>) : iterator ---- .. _function-linq_distinct_by_inplace_array_ls_autoTT_gr__block_ls_arg_c_TT_c_auto_gr_: .. das:function:: distinct_by_inplace(a: array; key: block<(arg:TT):auto>) : auto Returns distinct elements from an array based on a key in place :Arguments: * **a** : array * **key** : block<(arg:TT):auto> .. _function-linq_distinct_by_to_array_iterator_ls_autoTT_gr__block_ls_arg_c_TT_c_auto_gr_: .. das:function:: distinct_by_to_array(a: iterator; key: block<(arg:TT):auto>) : array Returns distinct elements from an iterator based on a key and returns an array :Arguments: * **a** : iterator * **key** : block<(arg:TT):auto> .. _function-linq_distinct_inplace_array_ls_autoTT_gr_: .. das:function:: distinct_inplace(a: array) : auto Returns distinct elements from an array in place :Arguments: * **a** : array .. _function-linq_distinct_to_array_iterator_ls_autoTT_gr_: .. das:function:: distinct_to_array(a: iterator) : array Returns distinct elements from an iterator and returns an array :Arguments: * **a** : iterator except ^^^^^^ .. _function-linq_except_iterator_ls_autoTT_gr__iterator_ls_autoTT_gr_: .. das:function:: except(src: iterator; exclude: iterator) : iterator Returns elements from the first iterator that are not in the second iterator :Arguments: * **src** : iterator * **exclude** : iterator .. _function-linq_except_array_ls_autoTT_gr__array_ls_autoTT_gr_: .. das:function:: except(src: array; exclude: array) : array ---- except_by ^^^^^^^^^ .. _function-linq_except_by_array_ls_autoTT_gr__array_ls_autoTT_gr__block_ls_arg_c_TT_c_auto_gr_: .. das:function:: except_by(src: array; exclude: array; key: block<(arg:TT):auto>) : array Returns elements from the first array that are not in the second array by key :Arguments: * **src** : array * **exclude** : array * **key** : block<(arg:TT):auto> .. _function-linq_except_by_iterator_ls_autoTT_gr__iterator_ls_autoTT_gr__block_ls_arg_c_TT_c_auto_gr_: .. das:function:: except_by(src: iterator; exclude: iterator; key: block<(arg:TT):auto>) : iterator ---- .. _function-linq_except_by_to_array_iterator_ls_autoTT_gr__iterator_ls_autoTT_gr__block_ls_arg_c_TT_c_auto_gr_: .. das:function:: except_by_to_array(src: iterator; exclude: iterator; key: block<(arg:TT):auto>) : array Returns elements from the first iterator that are not in the second iterator by key and returns an array :Arguments: * **src** : iterator * **exclude** : iterator * **key** : block<(arg:TT):auto> .. _function-linq_except_to_array_iterator_ls_autoTT_gr__iterator_ls_autoTT_gr_: .. das:function:: except_to_array(src: iterator; exclude: iterator) : array Returns elements from the first iterator that are not in the second iterator and returns an array :Arguments: * **src** : iterator * **exclude** : iterator intersect ^^^^^^^^^ .. _function-linq_intersect_array_ls_autoTT_gr__array_ls_autoTT_gr_: .. das:function:: intersect(srca: array; srcb: array) : array Returns elements that are present in both arrays :Arguments: * **srca** : array * **srcb** : array .. _function-linq_intersect_iterator_ls_autoTT_gr__iterator_ls_autoTT_gr_: .. das:function:: intersect(srca: iterator; srcb: iterator) : iterator ---- intersect_by ^^^^^^^^^^^^ .. _function-linq_intersect_by_array_ls_autoTT_gr__array_ls_autoTT_gr__block_ls_arg_c_TT_c_auto_gr_: .. das:function:: intersect_by(srca: array; srcb: array; key: block<(arg:TT):auto>) : array Returns elements that are present in both arrays by key :Arguments: * **srca** : array * **srcb** : array * **key** : block<(arg:TT):auto> .. _function-linq_intersect_by_iterator_ls_autoTT_gr__iterator_ls_autoTT_gr__block_ls_arg_c_TT_c_auto_gr_: .. das:function:: intersect_by(srca: iterator; srcb: iterator; key: block<(arg:TT):auto>) : iterator ---- .. _function-linq_intersect_by_to_array_iterator_ls_autoTT_gr__iterator_ls_autoTT_gr__block_ls_arg_c_TT_c_auto_gr_: .. das:function:: intersect_by_to_array(srca: iterator; srcb: iterator; key: block<(arg:TT):auto>) : array Returns elements that are present in both iterators by key and returns an array :Arguments: * **srca** : iterator * **srcb** : iterator * **key** : block<(arg:TT):auto> .. _function-linq_intersect_to_array_iterator_ls_autoTT_gr__iterator_ls_autoTT_gr_: .. das:function:: intersect_to_array(srca: iterator; srcb: iterator) : array Returns elements that are present in both iterators and returns an array :Arguments: * **srca** : iterator * **srcb** : iterator union ^^^^^ .. _function-linq_union_iterator_ls_autoTT_gr__iterator_ls_autoTT_gr_: .. das:function:: union(srca: iterator; srcb: iterator) : iterator Returns distinct elements from the concatenation of two iterators :Arguments: * **srca** : iterator * **srcb** : iterator .. _function-linq_union_array_ls_autoTT_gr__array_ls_autoTT_gr_: .. das:function:: union(srca: array; srcb: array) : array ---- union_by ^^^^^^^^ .. _function-linq_union_by_array_ls_autoTT_gr__array_ls_autoTT_gr__block_ls_arg_c_TT_c_auto_gr_: .. das:function:: union_by(srca: array; srcb: array; key: block<(arg:TT):auto>) : array Returns distinct elements from the concatenation of two arrays by key :Arguments: * **srca** : array * **srcb** : array * **key** : block<(arg:TT):auto> .. _function-linq_union_by_iterator_ls_autoTT_gr__iterator_ls_autoTT_gr__block_ls_arg_c_TT_c_auto_gr_: .. das:function:: union_by(srca: iterator; srcb: iterator; key: block<(arg:TT):auto>) : iterator ---- .. _function-linq_union_by_to_array_iterator_ls_autoTT_gr__iterator_ls_autoTT_gr__block_ls_arg_c_TT_c_auto_gr_: .. das:function:: union_by_to_array(srca: iterator; srcb: iterator; key: block<(arg:TT):auto>) : array Returns distinct elements from the concatenation of two iterators by key and returns an array :Arguments: * **srca** : iterator * **srcb** : iterator * **key** : block<(arg:TT):auto> .. _function-linq_union_to_array_iterator_ls_autoTT_gr__iterator_ls_autoTT_gr_: .. das:function:: union_to_array(srca: iterator; srcb: iterator) : array Returns distinct elements from the concatenation of two iterators and returns an array :Arguments: * **srca** : iterator * **srcb** : iterator unique ^^^^^^ .. _function-linq_unique_array_ls_autoTT_gr_: .. das:function:: unique(a: array) : array sort and remove duplicate elements from an array :Arguments: * **a** : array .. _function-linq_unique_iterator_ls_autoTT_gr_: .. das:function:: unique(a: iterator) : iterator ---- unique_by ^^^^^^^^^ .. _function-linq_unique_by_array_ls_autoTT_gr__block_ls_arg_c_TT_c_auto_gr_: .. das:function:: unique_by(a: array; key: block<(arg:TT):auto>) : array sort and remove duplicate elements from an array based on a key :Arguments: * **a** : array * **key** : block<(arg:TT):auto> .. _function-linq_unique_by_iterator_ls_autoTT_gr__block_ls_arg_c_TT_c_auto_gr_: .. das:function:: unique_by(a: iterator; key: block<(arg:TT):auto>) : iterator ---- .. _function-linq_unique_by_inplace_array_ls_autoTT_gr__block_ls_arg_c_TT_c_auto_gr_: .. das:function:: unique_by_inplace(a: array; key: block<(arg:TT):auto>) : auto remove duplicate elements from an array based on a key in place :Arguments: * **a** : array * **key** : block<(arg:TT):auto> .. _function-linq_unique_by_to_array_iterator_ls_autoTT_gr__block_ls_arg_c_TT_c_auto_gr_: .. das:function:: unique_by_to_array(a: iterator; key: block<(arg:TT):auto>) : array sort and remove duplicate elements from an iterator based on a key and returns an array :Arguments: * **a** : iterator * **key** : block<(arg:TT):auto> .. _function-linq_unique_inplace_array_ls_autoTT_gr_: .. das:function:: unique_inplace(a: array) : auto remove duplicate elements from sorted array in place :Arguments: * **a** : array .. _function-linq_unique_key_auto_0x1fe: .. das:function:: unique_key(a: auto) : auto generates unique key of workhorse type for the value :Arguments: * **a** : auto .. _function-linq_unique_to_array_iterator_ls_autoTT_gr_: .. das:function:: unique_to_array(a: iterator) : array sort and remove duplicate elements from an iterator and returns an array :Arguments: * **a** : iterator ++++++++++++++++++++++++ Concatenation operations ++++++++++++++++++++++++ * :ref:`append (arr: array\; value: TT) : array\ ` * :ref:`append (var it: iterator\; value: TT) : iterator\ ` * :ref:`append_inplace (var arr: array\; value: TT) : auto ` * :ref:`append_to_array (var it: iterator\; value: TT) : array\ ` * :ref:`concat (var a: iterator\; var b: iterator\) : iterator\ ` * :ref:`concat (a: array\; b: array\) : array\ ` * :ref:`concat_inplace (var a: array\; b: array\) : auto ` * :ref:`concat_to_array (var a: iterator\; var b: iterator\) : array\ ` * :ref:`prepend (var it: iterator\; value: TT) : iterator\ ` * :ref:`prepend (arr: array\; value: TT) : array\ ` * :ref:`prepend_inplace (var arr: array\; value: TT) : auto ` * :ref:`prepend_to_array (var it: iterator\; value: TT) : array\ ` append ^^^^^^ .. _function-linq_append_array_ls_autoTT_gr__TT: .. das:function:: append(arr: array; value: TT) : array Appends a value to the end of an array :Arguments: * **arr** : array * **value** : TT .. _function-linq_append_iterator_ls_autoTT_gr__TT: .. das:function:: append(it: iterator; value: TT) : iterator ---- .. _function-linq_append_inplace_array_ls_autoTT_gr__TT: .. das:function:: append_inplace(arr: array; value: TT) : auto Appends a value to the end of an array in place :Arguments: * **arr** : array * **value** : TT .. _function-linq_append_to_array_iterator_ls_autoTT_gr__TT: .. das:function:: append_to_array(it: iterator; value: TT) : array Appends a value to the end of an iterator and returns an array :Arguments: * **it** : iterator * **value** : TT concat ^^^^^^ .. _function-linq_concat_iterator_ls_autoTT_gr__iterator_ls_autoTT_gr_: .. das:function:: concat(a: iterator; b: iterator) : iterator Concatenates two iterators :Arguments: * **a** : iterator * **b** : iterator .. _function-linq_concat_array_ls_autoTT_gr__array_ls_autoTT_gr_: .. das:function:: concat(a: array; b: array) : array ---- .. _function-linq_concat_inplace_array_ls_autoTT_gr__array_ls_autoTT_gr_: .. das:function:: concat_inplace(a: array; b: array) : auto Concatenates two arrays in place :Arguments: * **a** : array * **b** : array .. _function-linq_concat_to_array_iterator_ls_autoTT_gr__iterator_ls_autoTT_gr_: .. das:function:: concat_to_array(a: iterator; b: iterator) : array Concatenates two iterators and returns an array :Arguments: * **a** : iterator * **b** : iterator prepend ^^^^^^^ .. _function-linq_prepend_iterator_ls_autoTT_gr__TT: .. das:function:: prepend(it: iterator; value: TT) : iterator Prepends a value to the beginning of an iterator :Arguments: * **it** : iterator * **value** : TT .. _function-linq_prepend_array_ls_autoTT_gr__TT: .. das:function:: prepend(arr: array; value: TT) : array ---- .. _function-linq_prepend_inplace_array_ls_autoTT_gr__TT: .. das:function:: prepend_inplace(arr: array; value: TT) : auto Prepends a value to the beginning of an array in place :Arguments: * **arr** : array * **value** : TT .. _function-linq_prepend_to_array_iterator_ls_autoTT_gr__TT: .. das:function:: prepend_to_array(it: iterator; value: TT) : array Prepends a value to the beginning of an iterator and returns an array :Arguments: * **it** : iterator * **value** : TT +++++++++++++++++++++ Generation operations +++++++++++++++++++++ * :ref:`default_empty (var src: iterator\) : iterator\ ` * :ref:`empty (var typ: auto(TT)) : iterator\ ` * :ref:`range_sequence (start: int; count: int) : iterator\ ` * :ref:`repeat (element: auto(TT); count: int) : iterator\ ` .. _function-linq_default_empty_iterator_ls_autoTT_gr_: .. das:function:: default_empty(src: iterator) : iterator Returns the elements of the iterator, or a default value if the iterator is empty :Arguments: * **src** : iterator .. _function-linq_empty_autoTT_0x8d5: .. das:function:: empty(typ: auto(TT)) : iterator Returns an empty iterator of the specified type :Arguments: * **typ** : auto(TT) .. _function-linq_range_sequence_int_int: .. das:function:: range_sequence(start: int; count: int) : iterator Generates a sequence of integers within a specified range :Arguments: * **start** : int * **count** : int .. _function-linq_repeat_autoTT_int_0x8fc: .. das:function:: repeat(element: auto(TT); count: int) : iterator Generates a sequence that contains one repeated value :Arguments: * **element** : auto(TT) * **count** : int ++++++++++++++++++++++ Aggregation operations ++++++++++++++++++++++ * :ref:`aggregate (var src: iterator\; seed: auto(AGG); func: block\<(acc:AGG;x:TT):AGG\>) : AGG ` * :ref:`aggregate (src: array\; seed: auto(AGG); func: block\<(acc:AGG;x:TT):AGG\>) : AGG ` * :ref:`average (src: array\) : TT ` * :ref:`average (var src: iterator\) : TT ` * :ref:`count (a: array\; predicate: block\<(arg:TT):bool\>) : int ` * :ref:`count (a: array\) : int ` * :ref:`count (var a: iterator\) : int ` * :ref:`count (var a: iterator\; predicate: block\<(arg:TT):bool\>) : int ` * :ref:`long_count (a: array\) : int64 ` * :ref:`long_count (var a: iterator\) : int64 ` * :ref:`max (var src: iterator\) : TT ` * :ref:`max (src: array\) : TT ` * :ref:`max_by (var src: iterator\; key: auto) : TT ` * :ref:`max_by (src: array\; key: auto) : TT ` * :ref:`min (var src: iterator\) : TT ` * :ref:`min (src: array\) : TT ` * :ref:`min_by (src: array\; key: auto) : TT ` * :ref:`min_by (var src: iterator\; key: auto) : TT ` * :ref:`min_max (var src: iterator\) : tuple\ ` * :ref:`min_max (src: array\) : tuple\ ` * :ref:`min_max_average (src: array\) : tuple\ ` * :ref:`min_max_average (var src: iterator\) : tuple\ ` * :ref:`min_max_average_by (src: array\; key: auto) : tuple\ ` * :ref:`min_max_average_by (var src: iterator\; key: auto) : tuple\ ` * :ref:`min_max_by (var src: iterator\; key: auto) : tuple\ ` * :ref:`min_max_by (src: array\; key: auto) : tuple\ ` * :ref:`sum (src: array\) : TT ` * :ref:`sum (var src: iterator\) : TT ` aggregate ^^^^^^^^^ .. _function-linq_aggregate_iterator_ls_autoTT_gr__autoAGG_block_ls_acc_c_AGG;x_c_TT_c_AGG_gr__0x5f6: .. das:function:: aggregate(src: iterator; 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 * **seed** : auto(AGG) * **func** : block<(acc:AGG;x:TT):AGG> .. _function-linq_aggregate_array_ls_autoTT_gr__autoAGG_block_ls_acc_c_AGG;x_c_TT_c_AGG_gr__0x600: .. das:function:: aggregate(src: array; seed: auto(AGG); func: block<(acc:AGG;x:TT):AGG>) : AGG ---- average ^^^^^^^ .. _function-linq_average_array_ls_autoTT_gr_: .. das:function:: average(src: array) : TT Averages elements in an array :Arguments: * **src** : array .. _function-linq_average_iterator_ls_autoTT_gr_: .. das:function:: average(src: iterator) : TT ---- count ^^^^^ .. _function-linq_count_array_ls_autoTT_gr__block_ls_arg_c_TT_c_bool_gr_: .. das:function:: count(a: array; predicate: block<(arg:TT):bool>) : int Counts elements in an array that satisfy a predicate :Arguments: * **a** : array * **predicate** : block<(arg:TT):bool> .. _function-linq_count_array_ls_autoTT_gr_: .. das:function:: count(a: array) : int .. _function-linq_count_iterator_ls_autoTT_gr_: .. das:function:: count(a: iterator) : int .. _function-linq_count_iterator_ls_autoTT_gr__block_ls_arg_c_TT_c_bool_gr_: .. das:function:: count(a: iterator; predicate: block<(arg:TT):bool>) : int ---- long_count ^^^^^^^^^^ .. _function-linq_long_count_array_ls_autoTT_gr_: .. das:function:: long_count(a: array) : int64 Counts elements in an array, using a long integer :Arguments: * **a** : array .. _function-linq_long_count_iterator_ls_autoTT_gr_: .. das:function:: long_count(a: iterator) : int64 ---- max ^^^ .. _function-linq_max_iterator_ls_autoTT_gr_: .. das:function:: max(src: iterator) : TT Finds the maximum element in an iterator :Arguments: * **src** : iterator .. _function-linq_max_array_ls_autoTT_gr_: .. das:function:: max(src: array) : TT ---- max_by ^^^^^^ .. _function-linq_max_by_iterator_ls_autoTT_gr__auto_0x57c: .. das:function:: max_by(src: iterator; key: auto) : TT Finds the maximum element in an iterator by key :Arguments: * **src** : iterator * **key** : auto .. _function-linq_max_by_array_ls_autoTT_gr__auto_0x586: .. das:function:: max_by(src: array; key: auto) : TT ---- min ^^^ .. _function-linq_min_iterator_ls_autoTT_gr_: .. das:function:: min(src: iterator) : TT Finds the minimum element in an iterator :Arguments: * **src** : iterator .. _function-linq_min_array_ls_autoTT_gr_: .. das:function:: min(src: array) : TT ---- min_by ^^^^^^ .. _function-linq_min_by_array_ls_autoTT_gr__auto_0x52e: .. das:function:: min_by(src: array; key: auto) : TT Finds the minimum element in an array by key :Arguments: * **src** : array * **key** : auto .. _function-linq_min_by_iterator_ls_autoTT_gr__auto_0x524: .. das:function:: min_by(src: iterator; key: auto) : TT ---- min_max ^^^^^^^ .. _function-linq_min_max_iterator_ls_autoTT_gr_: .. das:function:: min_max(src: iterator) : tuple Finds the minimum and maximum elements in an iterator :Arguments: * **src** : iterator .. _function-linq_min_max_array_ls_autoTT_gr_: .. das:function:: min_max(src: array) : tuple ---- min_max_average ^^^^^^^^^^^^^^^ .. _function-linq_min_max_average_array_ls_autoTT_gr_: .. das:function:: min_max_average(src: array) : tuple Finds the minimum, maximum, and average elements in an array :Arguments: * **src** : array .. _function-linq_min_max_average_iterator_ls_autoTT_gr_: .. das:function:: min_max_average(src: iterator) : tuple ---- min_max_average_by ^^^^^^^^^^^^^^^^^^ .. _function-linq_min_max_average_by_array_ls_autoTT_gr__auto_0x6bd: .. das:function:: min_max_average_by(src: array; key: auto) : tuple Finds the minimum, maximum, and average elements in an array by key :Arguments: * **src** : array * **key** : auto .. _function-linq_min_max_average_by_iterator_ls_autoTT_gr__auto_0x6b7: .. das:function:: min_max_average_by(src: iterator; key: auto) : tuple ---- min_max_by ^^^^^^^^^^ .. _function-linq_min_max_by_iterator_ls_autoTT_gr__auto_0x5d4: .. das:function:: min_max_by(src: iterator; key: auto) : tuple Finds the minimum and maximum elements in an iterator by key :Arguments: * **src** : iterator * **key** : auto .. _function-linq_min_max_by_array_ls_autoTT_gr__auto_0x5da: .. das:function:: min_max_by(src: array; key: auto) : tuple ---- sum ^^^ .. _function-linq_sum_array_ls_autoTT_gr_: .. das:function:: sum(src: array) : TT Sums elements in an array :Arguments: * **src** : array .. _function-linq_sum_iterator_ls_autoTT_gr_: .. das:function:: sum(src: iterator) : TT ++++++++++++++ Filtering data ++++++++++++++ * :ref:`where_ (src: array\; predicate: block\<(arg:TT):bool\>) : array\ ` * :ref:`where_ (var src: iterator\; predicate: block\<(arg:TT):bool\>) : iterator\ ` * :ref:`where_to_array (var src: iterator\; predicate: block\<(arg:TT):bool\>) : array\ ` where_ ^^^^^^ .. _function-linq_where__array_ls_autoTT_gr__block_ls_arg_c_TT_c_bool_gr_: .. das:function:: where_(src: array; predicate: block<(arg:TT):bool>) : array Filters elements in an array based on a predicate :Arguments: * **src** : array * **predicate** : block<(arg:TT):bool> .. _function-linq_where__iterator_ls_autoTT_gr__block_ls_arg_c_TT_c_bool_gr_: .. das:function:: where_(src: iterator; predicate: block<(arg:TT):bool>) : iterator ---- .. _function-linq_where_to_array_iterator_ls_autoTT_gr__block_ls_arg_c_TT_c_bool_gr_: .. das:function:: where_to_array(src: iterator; predicate: block<(arg:TT):bool>) : array Filters elements in an iterator based on a predicate and returns an array :Arguments: * **src** : iterator * **predicate** : block<(arg:TT):bool> +++++++++++++++++ Partitioning data +++++++++++++++++ * :ref:`chunk (src: array\; size: int) : array\\> ` * :ref:`chunk (var src: iterator\; size: int) : iterator\\> ` * :ref:`chunk_to_array (var src: iterator\; size: int) : array\\> ` * :ref:`skip (var src: iterator\; var total: int) : iterator\ ` * :ref:`skip (arr: array\; var total: int) : array\ ` * :ref:`skip_inplace (var arr: array\; var total: int) : auto ` * :ref:`skip_last (var src: iterator\; var total: int) : iterator\ ` * :ref:`skip_last (arr: array\; var total: int) : array\ ` * :ref:`skip_last_inplace (var arr: array\; var total: int) : auto ` * :ref:`skip_last_to_array (var src: iterator\; var total: int) : array\ ` * :ref:`skip_to_array (var src: iterator\; var total: int) : array\ ` * :ref:`skip_while (src: array\; predicate: block\<(arg:TT):bool\>) : array\ ` * :ref:`skip_while (var src: iterator\; predicate: block\<(arg:TT):bool\>) : iterator\ ` * :ref:`skip_while_to_array (var src: iterator\; predicate: block\<(arg:TT):bool\>) : array\ ` * :ref:`take (src: array\; from: range) : array\ ` * :ref:`take (var src: iterator\; from: range) : iterator\ ` * :ref:`take (var src: iterator\; var total: int) : iterator\ ` * :ref:`take (arr: array\; var total: int) : array\ ` * :ref:`take_inplace (var arr: array\; from: range) : auto ` * :ref:`take_inplace (var arr: array\; var total: int) : auto ` * :ref:`take_last (var src: iterator\; var total: int) : iterator\ ` * :ref:`take_last (arr: array\; var total: int) : array\ ` * :ref:`take_last_inplace (var arr: array\; var total: int) : auto ` * :ref:`take_last_to_array (var src: iterator\; var total: int) : array\ ` * :ref:`take_to_array (var src: iterator\; var total: int) : array\ ` * :ref:`take_to_array (var src: iterator\; from: range) : array\ ` * :ref:`take_while (var src: iterator\; predicate: block\<(arg:TT):bool\>) : iterator\ ` * :ref:`take_while (src: array\; predicate: block\<(arg:TT):bool\>) : array\ ` * :ref:`take_while_to_array (var src: iterator\; predicate: block\<(arg:TT):bool\>) : array\ ` chunk ^^^^^ .. _function-linq_chunk_array_ls_autoTT_gr__int: .. das:function:: chunk(src: array; size: int) : array> Splits an array into chunks of a specified size :Arguments: * **src** : array * **size** : int .. _function-linq_chunk_iterator_ls_autoTT_gr__int: .. das:function:: chunk(src: iterator; size: int) : iterator> ---- .. _function-linq_chunk_to_array_iterator_ls_autoTT_gr__int: .. das:function:: chunk_to_array(src: iterator; size: int) : array> Splits an iterator into chunks of a specified size and returns an array :Arguments: * **src** : iterator * **size** : int skip ^^^^ .. _function-linq_skip_iterator_ls_autoTT_gr__int: .. das:function:: skip(src: iterator; total: int) : iterator Yields all but the first `total` elements :Arguments: * **src** : iterator * **total** : int .. _function-linq_skip_array_ls_autoTT_gr__int: .. das:function:: skip(arr: array; total: int) : array ---- .. _function-linq_skip_inplace_array_ls_autoTT_gr__int: .. das:function:: skip_inplace(arr: array; total: int) : auto Removes the first `total` elements from an array in place :Arguments: * **arr** : array * **total** : int skip_last ^^^^^^^^^ .. _function-linq_skip_last_iterator_ls_autoTT_gr__int: .. das:function:: skip_last(src: iterator; total: int) : iterator Yields all but the last `total` elements from an iterator :Arguments: * **src** : iterator * **total** : int .. _function-linq_skip_last_array_ls_autoTT_gr__int: .. das:function:: skip_last(arr: array; total: int) : array ---- .. _function-linq_skip_last_inplace_array_ls_autoTT_gr__int: .. das:function:: skip_last_inplace(arr: array; total: int) : auto Removes the last `total` elements from an array in place :Arguments: * **arr** : array * **total** : int .. _function-linq_skip_last_to_array_iterator_ls_autoTT_gr__int: .. das:function:: skip_last_to_array(src: iterator; total: int) : array Yields all but the last `total` elements from an iterator and returns an array :Arguments: * **src** : iterator * **total** : int .. _function-linq_skip_to_array_iterator_ls_autoTT_gr__int: .. das:function:: skip_to_array(src: iterator; total: int) : array Yields all but the first `total` elements and returns an array :Arguments: * **src** : iterator * **total** : int skip_while ^^^^^^^^^^ .. _function-linq_skip_while_array_ls_autoTT_gr__block_ls_arg_c_TT_c_bool_gr_: .. das:function:: skip_while(src: array; predicate: block<(arg:TT):bool>) : array Skips all elements of an array while the predicate is true :Arguments: * **src** : array * **predicate** : block<(arg:TT):bool> .. _function-linq_skip_while_iterator_ls_autoTT_gr__block_ls_arg_c_TT_c_bool_gr_: .. das:function:: skip_while(src: iterator; predicate: block<(arg:TT):bool>) : iterator ---- .. _function-linq_skip_while_to_array_iterator_ls_autoTT_gr__block_ls_arg_c_TT_c_bool_gr_: .. das:function:: skip_while_to_array(src: iterator; predicate: block<(arg:TT):bool>) : array Skips all elements of an iterator while the predicate is true and returns an array :Arguments: * **src** : iterator * **predicate** : block<(arg:TT):bool> take ^^^^ .. _function-linq_take_array_ls_autoTT_gr__range: .. das:function:: take(src: array; from: range) : array Yields a range of elements from an array :Arguments: * **src** : array * **from** : range .. _function-linq_take_iterator_ls_autoTT_gr__range: .. das:function:: take(src: iterator; from: range) : iterator .. _function-linq_take_iterator_ls_autoTT_gr__int: .. das:function:: take(src: iterator; total: int) : iterator .. _function-linq_take_array_ls_autoTT_gr__int: .. das:function:: take(arr: array; total: int) : array ---- take_inplace ^^^^^^^^^^^^ .. _function-linq_take_inplace_array_ls_autoTT_gr__range: .. das:function:: take_inplace(arr: array; from: range) : auto Keeps only a range of elements in an array in place :Arguments: * **arr** : array * **from** : range .. _function-linq_take_inplace_array_ls_autoTT_gr__int: .. das:function:: take_inplace(arr: array; total: int) : auto ---- take_last ^^^^^^^^^ .. _function-linq_take_last_iterator_ls_autoTT_gr__int: .. das:function:: take_last(src: iterator; total: int) : iterator Yields only the last `total` elements from an iterator :Arguments: * **src** : iterator * **total** : int .. _function-linq_take_last_array_ls_autoTT_gr__int: .. das:function:: take_last(arr: array; total: int) : array ---- .. _function-linq_take_last_inplace_array_ls_autoTT_gr__int: .. das:function:: take_last_inplace(arr: array; total: int) : auto Keeps only the last `total` elements in an array in place :Arguments: * **arr** : array * **total** : int .. _function-linq_take_last_to_array_iterator_ls_autoTT_gr__int: .. das:function:: take_last_to_array(src: iterator; total: int) : array Yields only the last `total` elements from an iterator and returns an array :Arguments: * **src** : iterator * **total** : int take_to_array ^^^^^^^^^^^^^ .. _function-linq_take_to_array_iterator_ls_autoTT_gr__int: .. das:function:: take_to_array(src: iterator; total: int) : array Yields only the first `total` elements and returns an array :Arguments: * **src** : iterator * **total** : int .. _function-linq_take_to_array_iterator_ls_autoTT_gr__range: .. das:function:: take_to_array(src: iterator; from: range) : array ---- take_while ^^^^^^^^^^ .. _function-linq_take_while_iterator_ls_autoTT_gr__block_ls_arg_c_TT_c_bool_gr_: .. das:function:: take_while(src: iterator; predicate: block<(arg:TT):bool>) : iterator Yields only the elements of an iterator while the predicate is true :Arguments: * **src** : iterator * **predicate** : block<(arg:TT):bool> .. _function-linq_take_while_array_ls_autoTT_gr__block_ls_arg_c_TT_c_bool_gr_: .. das:function:: take_while(src: array; predicate: block<(arg:TT):bool>) : array ---- .. _function-linq_take_while_to_array_iterator_ls_autoTT_gr__block_ls_arg_c_TT_c_bool_gr_: .. das:function:: take_while_to_array(src: iterator; predicate: block<(arg:TT):bool>) : array Yields only the elements of an iterator while the predicate is true and returns an array :Arguments: * **src** : iterator * **predicate** : block<(arg:TT):bool> +++++++++++++++++++++++++ Join and group operations +++++++++++++++++++++++++ * :ref:`group_by (var source: iterator\; key: auto; element_selector: auto; result_selector: auto) : auto ` * :ref:`group_by (source: array\; key: auto; element_selector: auto; result_selector: auto) : auto ` * :ref:`group_by_to_array (var source: iterator\; key: auto; element_selector: auto; result_selector: auto) : auto ` * :ref:`group_join (var srca: iterator\; var srcb: iterator\; keya: auto; keyb: auto; result: auto) : iterator\,type\\>))\> ` * :ref:`group_join (srca: array\; srcb: array\; keya: auto; keyb: auto; result: auto) : array\,type\\>))\> ` * :ref:`group_join_to_array (var srca: iterator\; var srcb: iterator\; keya: auto; keyb: auto; result: auto) : array\,type\\>))\> ` * :ref:`join (srca: array\; srcb: array\; keya: auto; keyb: auto; result: auto) : array\,type\))\> ` * :ref:`join (var srca: iterator\; var srcb: iterator\; keya: auto; keyb: auto; result: auto) : iterator\,type\))\> ` * :ref:`join_to_array (var srca: iterator\; var srcb: iterator\; keya: auto; keyb: auto; result: auto) : array\,type\))\> ` group_by ^^^^^^^^ .. _function-linq_group_by_iterator_ls_autoTT_gr__auto_auto_auto_0x741: .. das:function:: group_by(source: iterator; 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 * **key** : auto * **element_selector** : auto * **result_selector** : auto .. _function-linq_group_by_array_ls_autoTT_gr__auto_auto_auto_0x747: .. das:function:: group_by(source: array; key: auto; element_selector: auto; result_selector: auto) : auto ---- .. _function-linq_group_by_to_array_iterator_ls_autoTT_gr__auto_auto_auto_0x74d: .. das:function:: group_by_to_array(source: iterator; 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 * **key** : auto * **element_selector** : auto * **result_selector** : auto group_join ^^^^^^^^^^ .. _function-linq_group_join_iterator_ls_autoTA_gr__iterator_ls_autoTB_gr__auto_auto_auto_0x711: .. das:function:: group_join(srca: iterator; srcb: iterator; keya: auto; keyb: auto; result: auto) : iterator,type>))> we pass TA, and sequence of TB to 'result' :Arguments: * **srca** : iterator * **srcb** : iterator * **keya** : auto * **keyb** : auto * **result** : auto .. _function-linq_group_join_array_ls_autoTA_gr__array_ls_autoTB_gr__auto_auto_auto_0x717: .. das:function:: group_join(srca: array; srcb: array; keya: auto; keyb: auto; result: auto) : array,type>))> ---- .. _function-linq_group_join_to_array_iterator_ls_autoTA_gr__iterator_ls_autoTB_gr__auto_auto_auto_0x71d: .. das:function:: group_join_to_array(srca: iterator; srcb: iterator; keya: auto; keyb: auto; result: auto) : array,type>))> we pass TA, and sequence of TB to 'result' :Arguments: * **srca** : iterator * **srcb** : iterator * **keya** : auto * **keyb** : auto * **result** : auto join ^^^^ .. _function-linq_join_array_ls_autoTA_gr__array_ls_autoTB_gr__auto_auto_auto_0x6e8: .. das:function:: join(srca: array; srcb: array; keya: auto; keyb: auto; result: auto) : array,type))> Joins two arrays based on matching keys (inner join) :Arguments: * **srca** : array * **srcb** : array * **keya** : auto * **keyb** : auto * **result** : auto .. _function-linq_join_iterator_ls_autoTA_gr__iterator_ls_autoTB_gr__auto_auto_auto_0x6e2: .. das:function:: join(srca: iterator; srcb: iterator; keya: auto; keyb: auto; result: auto) : iterator,type))> ---- .. _function-linq_join_to_array_iterator_ls_autoTA_gr__iterator_ls_autoTB_gr__auto_auto_auto_0x6ee: .. das:function:: join_to_array(srca: iterator; srcb: iterator; keya: auto; keyb: auto; result: auto) : array,type))> Joins two iterators based on matching keys (inner join) and returns an array :Arguments: * **srca** : iterator * **srcb** : iterator * **keya** : auto * **keyb** : auto * **result** : auto +++++++++++++ Querying data +++++++++++++ * :ref:`all (src: array\; predicate: block\<(arg:TT):bool\>) : bool ` * :ref:`all (var src: iterator\; predicate: block\<(arg:TT):bool\>) : bool ` * :ref:`any (src: array\; predicate: block\<(arg:TT):bool\>) : bool ` * :ref:`any (var src: iterator\) : bool ` * :ref:`any (src: array\) : bool ` * :ref:`any (var src: iterator\; predicate: block\<(arg:TT):bool\>) : bool ` * :ref:`contains (var src: iterator\; element: TT) : bool ` * :ref:`contains (src: array\; element: TT) : bool ` all ^^^ .. _function-linq_all_array_ls_autoTT_gr__block_ls_arg_c_TT_c_bool_gr_: .. das:function:: all(src: array; predicate: block<(arg:TT):bool>) : bool Returns true if all elements in the array satisfy the predicate :Arguments: * **src** : array * **predicate** : block<(arg:TT):bool> .. _function-linq_all_iterator_ls_autoTT_gr__block_ls_arg_c_TT_c_bool_gr_: .. das:function:: all(src: iterator; predicate: block<(arg:TT):bool>) : bool ---- any ^^^ .. _function-linq_any_array_ls_autoTT_gr__block_ls_arg_c_TT_c_bool_gr_: .. das:function:: any(src: array; predicate: block<(arg:TT):bool>) : bool Returns true if any element in the array satisfies the predicate :Arguments: * **src** : array * **predicate** : block<(arg:TT):bool> .. _function-linq_any_iterator_ls_autoTT_gr_: .. das:function:: any(src: iterator) : bool .. _function-linq_any_array_ls_autoTT_gr_: .. das:function:: any(src: array) : bool .. _function-linq_any_iterator_ls_autoTT_gr__block_ls_arg_c_TT_c_bool_gr_: .. das:function:: any(src: iterator; predicate: block<(arg:TT):bool>) : bool ---- contains ^^^^^^^^ .. _function-linq_contains_iterator_ls_autoTT_gr__TT: .. das:function:: contains(src: iterator; element: TT) : bool Returns true if the element is present in the iterator :Arguments: * **src** : iterator * **element** : TT .. _function-linq_contains_array_ls_autoTT_gr__TT: .. das:function:: contains(src: array; element: TT) : bool ++++++++++++++++++ Element operations ++++++++++++++++++ * :ref:`element_at (var src: iterator\; index: int) : TT ` * :ref:`element_at (src: array\; index: int) : TT ` * :ref:`element_at_or_default (var src: iterator\; index: int) : TT ` * :ref:`element_at_or_default (src: array\; index: int) : TT ` * :ref:`first (var src: iterator\) : TT ` * :ref:`first (src: array\) : TT ` * :ref:`first_or_default (src: array\; defaultValue: TT) : TT ` * :ref:`first_or_default (var src: iterator\; defaultValue: TT) : TT ` * :ref:`last (var src: iterator\) : TT ` * :ref:`last (src: array\) : TT ` * :ref:`last_or_default (src: array\; defaultValue: TT) : TT ` * :ref:`last_or_default (var src: iterator\; defaultValue: TT) : TT ` * :ref:`single (src: array\) : TT ` * :ref:`single (var src: iterator\) : TT ` * :ref:`single_or_default (var src: iterator\; defaultValue: TT) : TT ` * :ref:`single_or_default (src: array\; defaultValue: TT) : TT ` element_at ^^^^^^^^^^ .. _function-linq_element_at_iterator_ls_autoTT_gr__int: .. das:function:: element_at(src: iterator; index: int) : TT Returns the element at the specified index :Arguments: * **src** : iterator * **index** : int .. _function-linq_element_at_array_ls_autoTT_gr__int: .. das:function:: element_at(src: array; index: int) : TT ---- element_at_or_default ^^^^^^^^^^^^^^^^^^^^^ .. _function-linq_element_at_or_default_iterator_ls_autoTT_gr__int: .. das:function:: element_at_or_default(src: iterator; index: int) : TT Returns the element at the specified index, or a default value if the index is out of range :Arguments: * **src** : iterator * **index** : int .. _function-linq_element_at_or_default_array_ls_autoTT_gr__int: .. das:function:: element_at_or_default(src: array; index: int) : TT ---- first ^^^^^ .. _function-linq_first_iterator_ls_autoTT_gr_: .. das:function:: first(src: iterator) : TT Returns the first element of an iterator :Arguments: * **src** : iterator .. _function-linq_first_array_ls_autoTT_gr_: .. das:function:: first(src: array) : TT ---- first_or_default ^^^^^^^^^^^^^^^^ .. _function-linq_first_or_default_array_ls_autoTT_gr__TT: .. das:function:: first_or_default(src: array; defaultValue: TT) : TT Returns the first element of an array, or a default value if the array is empty :Arguments: * **src** : array * **defaultValue** : TT .. _function-linq_first_or_default_iterator_ls_autoTT_gr__TT: .. das:function:: first_or_default(src: iterator; defaultValue: TT) : TT ---- last ^^^^ .. _function-linq_last_iterator_ls_autoTT_gr_: .. das:function:: last(src: iterator) : TT Returns the last element of an iterator :Arguments: * **src** : iterator .. _function-linq_last_array_ls_autoTT_gr_: .. das:function:: last(src: array) : TT ---- last_or_default ^^^^^^^^^^^^^^^ .. _function-linq_last_or_default_array_ls_autoTT_gr__TT: .. das:function:: last_or_default(src: array; defaultValue: TT) : TT Returns the last element of an array, or a default value if the array is empty :Arguments: * **src** : array * **defaultValue** : TT .. _function-linq_last_or_default_iterator_ls_autoTT_gr__TT: .. das:function:: last_or_default(src: iterator; defaultValue: TT) : TT ---- single ^^^^^^ .. _function-linq_single_array_ls_autoTT_gr_: .. das:function:: single(src: array) : TT Returns the only element of an array, and throws if there is not exactly one element :Arguments: * **src** : array .. _function-linq_single_iterator_ls_autoTT_gr_: .. das:function:: single(src: iterator) : TT ---- single_or_default ^^^^^^^^^^^^^^^^^ .. _function-linq_single_or_default_iterator_ls_autoTT_gr__TT: .. das:function:: single_or_default(src: iterator; defaultValue: TT) : TT Returns the only element of an iterator, or a default value if there is not exactly one element :Arguments: * **src** : iterator * **defaultValue** : TT .. _function-linq_single_or_default_array_ls_autoTT_gr__TT: .. das:function:: single_or_default(src: array; defaultValue: TT) : TT ++++++++++++++++++++ Transform operations ++++++++++++++++++++ * :ref:`select (src: array\) : array\\> ` * :ref:`select (var src: iterator\) : iterator\\> ` * :ref:`select (var src: iterator\; result_selector: auto) : iterator\))\> ` * :ref:`select (src: array\; result_selector: auto) : array\))\> ` * :ref:`select_many (var src: iterator\; result_selector: auto) : iterator\)))\> ` * :ref:`select_many (src: array\; result_selector: auto) : array\)))\> ` * :ref:`select_many (src: array\; collection_selector: auto; result_selector: auto) : array\))))\> ` * :ref:`select_many (var src: iterator\; collection_selector: auto; result_selector: auto) : iterator\))))\> ` * :ref:`select_many_to_array (var src: iterator\; collection_selector: auto; result_selector: auto) : array\))))\> ` * :ref:`select_many_to_array (var src: iterator\; result_selector: auto) : array\)))\> ` * :ref:`select_to_array (var src: iterator\; result_selector: auto) : array\))\> ` * :ref:`select_to_array (var src: iterator\) : array\\> ` * :ref:`zip (var a: iterator\; var b: iterator\) : iterator\\> ` * :ref:`zip (a: array\; b: array\) : array\\> ` * :ref:`zip (a: array\; b: array\; result_selector: block\<(l:TT;r:UU):auto\>) : array\,type\))\> ` * :ref:`zip (var a: iterator\; var b: iterator\; result_selector: block\<(l:TT;r:UU):auto\>) : iterator\,type\))\> ` * :ref:`zip (a: array\; b: array\; c: array\) : array\\> ` * :ref:`zip (var a: iterator\; var b: iterator\; var c: iterator\) : iterator\\> ` * :ref:`zip_to_array (var a: iterator\; var b: iterator\; var c: iterator\) : array\\> ` * :ref:`zip_to_array (var a: iterator\; var b: iterator\) : array\\> ` * :ref:`zip_to_array (var a: iterator\; var b: iterator\; result_selector: block\<(l:TT;r:UU):auto\>) : array\,type\))\> ` select ^^^^^^ .. _function-linq_select_array_ls_autoTT_gr_: .. das:function:: select(src: array) : array> Projects each element of an array into a new form :Arguments: * **src** : array .. _function-linq_select_iterator_ls_autoTT_gr_: .. das:function:: select(src: iterator) : iterator> .. _function-linq_select_iterator_ls_autoTT_gr__auto_0xb51: .. das:function:: select(src: iterator; result_selector: auto) : iterator))> .. _function-linq_select_array_ls_autoTT_gr__auto_0xb57: .. das:function:: select(src: array; result_selector: auto) : array))> ---- select_many ^^^^^^^^^^^ .. _function-linq_select_many_iterator_ls_autoTT_gr__auto_0xbba: .. das:function:: select_many(src: iterator; result_selector: auto) : iterator)))> Projects each element of an iterator to an iterator and flattens the resulting iterators into one iterator :Arguments: * **src** : iterator * **result_selector** : auto .. _function-linq_select_many_array_ls_autoTT_gr__auto_0xbc0: .. das:function:: select_many(src: array; result_selector: auto) : array)))> .. _function-linq_select_many_array_ls_autoTT_gr__auto_auto_0xbe9: .. das:function:: select_many(src: array; collection_selector: auto; result_selector: auto) : array))))> .. _function-linq_select_many_iterator_ls_autoTT_gr__auto_auto_0xbe3: .. das:function:: select_many(src: iterator; collection_selector: auto; result_selector: auto) : iterator))))> ---- select_many_to_array ^^^^^^^^^^^^^^^^^^^^ .. _function-linq_select_many_to_array_iterator_ls_autoTT_gr__auto_auto_0xbef: .. das:function:: select_many_to_array(src: iterator; collection_selector: auto; result_selector: auto) : array))))> Projects each element of an iterator to an iterator and flattens the resulting iterators into one array :Arguments: * **src** : iterator * **collection_selector** : auto * **result_selector** : auto .. _function-linq_select_many_to_array_iterator_ls_autoTT_gr__auto_0xbc6: .. das:function:: select_many_to_array(src: iterator; result_selector: auto) : array)))> ---- select_to_array ^^^^^^^^^^^^^^^ .. _function-linq_select_to_array_iterator_ls_autoTT_gr__auto_0xb5d: .. das:function:: select_to_array(src: iterator; result_selector: auto) : array))> Projects each element of an iterator into a new form using a selector function and returns an array :Arguments: * **src** : iterator * **result_selector** : auto .. _function-linq_select_to_array_iterator_ls_autoTT_gr_: .. das:function:: select_to_array(src: iterator) : array> ---- zip ^^^ .. _function-linq_zip_iterator_ls_autoTT_gr__iterator_ls_autoUU_gr_: .. das:function:: zip(a: iterator; b: iterator) : iterator> Merges two iterators into an iterator of tuples :Arguments: * **a** : iterator * **b** : iterator .. _function-linq_zip_array_ls_autoTT_gr__array_ls_autoUU_gr_: .. das:function:: zip(a: array; b: array) : array> .. _function-linq_zip_array_ls_autoTT_gr__array_ls_autoUU_gr__block_ls_l_c_TT;r_c_UU_c_auto_gr_: .. das:function:: zip(a: array; b: array; result_selector: block<(l:TT;r:UU):auto>) : array,type))> .. _function-linq_zip_iterator_ls_autoTT_gr__iterator_ls_autoUU_gr__block_ls_l_c_TT;r_c_UU_c_auto_gr_: .. das:function:: zip(a: iterator; b: iterator; result_selector: block<(l:TT;r:UU):auto>) : iterator,type))> .. _function-linq_zip_array_ls_autoTT_gr__array_ls_autoUU_gr__array_ls_autoWW_gr_: .. das:function:: zip(a: array; b: array; c: array) : array> .. _function-linq_zip_iterator_ls_autoTT_gr__iterator_ls_autoUU_gr__iterator_ls_autoWW_gr_: .. das:function:: zip(a: iterator; b: iterator; c: iterator) : iterator> ---- zip_to_array ^^^^^^^^^^^^ .. _function-linq_zip_to_array_iterator_ls_autoTT_gr__iterator_ls_autoUU_gr__iterator_ls_autoWW_gr_: .. das:function:: zip_to_array(a: iterator; b: iterator; c: iterator) : array> Merges three iterators into an array of tuples :Arguments: * **a** : iterator * **b** : iterator * **c** : iterator .. _function-linq_zip_to_array_iterator_ls_autoTT_gr__iterator_ls_autoUU_gr_: .. das:function:: zip_to_array(a: iterator; b: iterator) : array> .. _function-linq_zip_to_array_iterator_ls_autoTT_gr__iterator_ls_autoUU_gr__block_ls_l_c_TT;r_c_UU_c_auto_gr_: .. das:function:: zip_to_array(a: iterator; b: iterator; result_selector: block<(l:TT;r:UU):auto>) : array,type))> +++++++++++++++++++++ Conversion operations +++++++++++++++++++++ * :ref:`to_sequence (a: array\) : iterator\ ` * :ref:`to_sequence_move (var a: array\) : iterator\ ` * :ref:`to_table (a: array\; key: block\<(v:TT):auto\>; elementSelector: block\<(v:TT):auto\>) : table\)), typedecl(elementSelector(type\))\> ` * :ref:`to_table (var a: iterator\; key: block\<(v:TT):auto\>; elementSelector: block\<(v:TT):auto\>) : table\)), typedecl(elementSelector(type\))\> ` .. _function-linq_to_sequence_array_ls_autoTT_gr_: .. das:function:: to_sequence(a: array) : iterator Converts an array to an iterator :Arguments: * **a** : array .. _function-linq_to_sequence_move_array_ls_autoTT_gr_: .. das:function:: to_sequence_move(a: array) : iterator Converts an array to an iterator, captures input :Arguments: * **a** : array to_table ^^^^^^^^ .. _function-linq_to_table_array_ls_autoTT_gr__block_ls_v_c_TT_c_auto_gr__block_ls_v_c_TT_c_auto_gr_: .. das:function:: to_table(a: array; key: block<(v:TT):auto>; elementSelector: block<(v:TT):auto>) : table)), typedecl(elementSelector(type))> Converts an array to a table :Arguments: * **a** : array * **key** : block<(v:TT):auto> * **elementSelector** : block<(v:TT):auto> .. _function-linq_to_table_iterator_ls_autoTT_gr__block_ls_v_c_TT_c_auto_gr__block_ls_v_c_TT_c_auto_gr_: .. das:function:: to_table(a: iterator; key: block<(v:TT):auto>; elementSelector: block<(v:TT):auto>) : table)), typedecl(elementSelector(type))> ++++++++++++++++++++ Comparators and keys ++++++++++++++++++++ * :ref:`less (a: tuple\; b: tuple\) : bool ` * :ref:`less (a: auto; b: auto) : bool ` * :ref:`less (a: tuple\; b: tuple\) : bool ` * :ref:`less (a: tuple\; b: tuple\) : bool ` * :ref:`less (a: tuple\; b: tuple\) : bool ` * :ref:`sequence_equal (var first: iterator\; var second: iterator\) : bool ` * :ref:`sequence_equal (first: array\; second: array\) : bool ` * :ref:`sequence_equal_by (var first: iterator\; var second: iterator\; key: block\<(arg:TT):auto\>) : bool ` * :ref:`sequence_equal_by (first: array\; second: array\; key: block\<(arg:TT):auto\>) : bool ` less ^^^^ .. _function-linq_less_tuple_ls_autoTT_gr__tuple_ls_autoTT_gr_: .. das:function:: less(a: tuple; b: tuple) : bool Compares two tuples, returns true if first is less than second :Arguments: * **a** : tuple * **b** : tuple .. _function-linq_less_auto_auto_0x19d: .. das:function:: less(a: auto; b: auto) : bool .. _function-linq_less_tuple_ls_autoTT;autoUU;autoVV_gr__tuple_ls_autoTT;autoUU;autoVV_gr_: .. das:function:: less(a: tuple; b: tuple) : bool .. _function-linq_less_tuple_ls_autoTT;autoUU_gr__tuple_ls_autoTT;autoUU_gr_: .. das:function:: less(a: tuple; b: tuple) : bool .. _function-linq_less_tuple_ls_autoTT;autoUU;autoVV;autoWW_gr__tuple_ls_autoTT;autoUU;autoVV;autoWW_gr_: .. das:function:: less(a: tuple; b: tuple) : bool ---- sequence_equal ^^^^^^^^^^^^^^ .. _function-linq_sequence_equal_iterator_ls_autoTT_gr__iterator_ls_autoTT_gr_: .. das:function:: sequence_equal(first: iterator; second: iterator) : bool Checks if two sequences are equal :Arguments: * **first** : iterator * **second** : iterator .. _function-linq_sequence_equal_array_ls_autoTT_gr__array_ls_autoTT_gr_: .. das:function:: sequence_equal(first: array; second: array) : bool ---- sequence_equal_by ^^^^^^^^^^^^^^^^^ .. _function-linq_sequence_equal_by_iterator_ls_autoTT_gr__iterator_ls_autoTT_gr__block_ls_arg_c_TT_c_auto_gr_: .. das:function:: sequence_equal_by(first: iterator; second: iterator; key: block<(arg:TT):auto>) : bool Checks if two sequences are equal by key :Arguments: * **first** : iterator * **second** : iterator * **key** : block<(arg:TT):auto> .. _function-linq_sequence_equal_by_array_ls_autoTT_gr__array_ls_autoTT_gr__block_ls_arg_c_TT_c_auto_gr_: .. das:function:: sequence_equal_by(first: array; second: array; key: block<(arg:TT):auto>) : bool