當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Elixir Enum.zip_reduce用法及代碼示例


Elixir語言中 Enum.zip_reduce 相關用法介紹如下。

用法一

zip_reduce(enums, acc, reducer)
(自 1.12.0 起)
@spec zip_reduce(t(), acc, ([term()], acc -> acc)) :: acc when acc: term()

減少所有給定的 enumerables,隻要任何 enumerable 為空就停止。

reducer 將接收 2 個參數:一個元素列表(每個枚舉中的一個)和累加器。

在實踐中,此函數提供的行為可以通過以下方式實現:

Enum.reduce(Stream.zip(enums), acc, reducer)

zip_reduce/3 的存在是為了方便。

例子

iex> enums = [[1, 1], [2, 2], [3, 3]]
...>  Enum.zip_reduce(enums, [], fn elements, acc ->
...>    [List.to_tuple(elements) | acc]
...> end)
[{1, 2, 3}, {1, 2, 3}]

iex> enums = [[1, 2], %{a: 3, b: 4}, [5, 6]]
...> Enum.zip_reduce(enums, [], fn elements, acc ->
...>   [List.to_tuple(elements) | acc]
...> end)
[{2, {:b, 4}, 6}, {1, {:a, 3}, 5}]

用法二

zip_reduce(left, right, acc, reducer)
(自 1.12.0 起)
@spec zip_reduce(
  t(),
  t(),
  acc,
  (enum1_elem :: term(), enum2_elem :: term(), acc -> acc)
) :: acc
when acc: term()

一旦任何一個可枚舉為空,就減少兩個以上的可枚舉停止。

在實踐中,此函數提供的行為可以通過以下方式實現:

Enum.reduce(Stream.zip(left, right), acc, reducer)

zip_reduce/4 的存在是為了方便。

例子

iex> Enum.zip_reduce([1, 2], [3, 4], 0, fn x, y, acc -> x + y + acc end)
10

iex> Enum.zip_reduce([1, 2], [3, 4], [], fn x, y, acc -> [x + y | acc] end)
[6, 4]

相關用法


注:本文由純淨天空篩選整理自elixir-lang.org大神的英文原創作品 Enum.zip_reduce(enums, acc, reducer)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。