Elixir:流式运行
Elixir: Streaming into runs
我想流一个列表(预排序),例如
[1,1,1,2,2,2,2,2,2,3,3,4]
所以它被分成这样的运行
[[1,1,1],[2,2,2,2,2,2],[3,3],[ 4]]
有没有一个巧妙的方法来做到这一点?
我一直在研究:
Stream.transform,
Stream.take_while,
Enum.split_while,
Enum.partition,
Enum.flat_map_reduce
最后我需要将答案从数字列表扩展到包含数字的元组
我认为 Enum.chunk_by/2
(还有一个 Stream
版本)可以解决问题:
iex(1)> [1,1,1,2,2,2,2,2,2,3,3,4] |> Enum.chunk_by(fn(x) -> x end)
[[1, 1, 1], [2, 2, 2, 2, 2, 2], [3, 3], [4]]
或使用捕获语法:
iex(2)> [1,1,1,2,2,2,2,2,2,3,3,4] |> Enum.chunk_by(&(&1))
我会用 Stream.chunk_by
:
Stream.chunk_by(nums, fn num -> num end) |> Enum.to_list
#> [[1,1,1], [2,2,2,2,2,2], [3,3], [4]]]
简单!
我想流一个列表(预排序),例如
[1,1,1,2,2,2,2,2,2,3,3,4]
所以它被分成这样的运行
[[1,1,1],[2,2,2,2,2,2],[3,3],[ 4]]
有没有一个巧妙的方法来做到这一点?
我一直在研究: Stream.transform, Stream.take_while, Enum.split_while, Enum.partition, Enum.flat_map_reduce
最后我需要将答案从数字列表扩展到包含数字的元组
我认为 Enum.chunk_by/2
(还有一个 Stream
版本)可以解决问题:
iex(1)> [1,1,1,2,2,2,2,2,2,3,3,4] |> Enum.chunk_by(fn(x) -> x end)
[[1, 1, 1], [2, 2, 2, 2, 2, 2], [3, 3], [4]]
或使用捕获语法:
iex(2)> [1,1,1,2,2,2,2,2,2,3,3,4] |> Enum.chunk_by(&(&1))
我会用 Stream.chunk_by
:
Stream.chunk_by(nums, fn num -> num end) |> Enum.to_list
#> [[1,1,1], [2,2,2,2,2,2], [3,3], [4]]]
简单!