关于elixir:elixir-0083-Streamtransform-的用法

4次阅读

共计 422 个字符,预计需要花费 2 分钟才能阅读完成。

在 elixir 里能够用 Stream 来示意有限长的序列,例如 0,1,2,3… 就能够示意为:

iex> s = Stream.iterate(0, & &1 + 1)
#Function<62.50989570/2 in Stream.unfold/2>

如果咱们想要计算这个数列中每 5 个数的和,就能够应用 Stream.transform 函数:

iex> s1 = Stream.transform(s, {0, 0}, fn x, {sum, count} ->
...> if count == 5 do                                      
...> {[sum], {x, 1}}                                       
...> else
...> {[], {sum + x, count + 1}}                            
...> end
...> end)
#Function<60.50989570/2 in Stream.transform/3>
iex> Enum.take(s1, 10)
[10, 35, 60, 85, 110, 135, 160, 185, 210, 235]

它是 Enum.flat_map_reduce 的 Stream 版本。

正文完
 0