我想找到第一个负数之前的所有正数的总和.
我在elixir中得到以下列表.
iex(4)> steps = [0,1,2,3,-4,5,6,-1]
Run Code Online (Sandbox Code Playgroud)
我按如下方式计算此列表的总和
Enum.reduce(steps,0,fn x,acc -> acc=acc+x end)
Run Code Online (Sandbox Code Playgroud)
一旦我们达到负数,如何减少?
Gav*_*aff 13
使用Enum.reduce_while https://hexdocs.pm/elixir/Enum.html#reduce_while/3
[1,2,3,-4,5,6,-1] |> Enum.reduce_while(0, fn x, acc ->
if x > 0, do: {:cont, acc + x}, else: {:halt, acc}
end )
Run Code Online (Sandbox Code Playgroud)
您可以使用 Enum.take_while/2
从枚举的开头获取项目,同时fun返回真值.
Enum.take_while([0, 1, 2, 3, -4, 5, 6, -1], fn(x) -> x >= 0 end) |> Enum.sum
=> 6
Run Code Online (Sandbox Code Playgroud)
或者使用速记
list = [0, 1, 2, 3, -4, 5, 6, -1]
Enum.take_while(list, &(&1 >= 0)) |> Enum.sum
Run Code Online (Sandbox Code Playgroud)