丹药:流入运行



我想流式传输一个列表(预排序),例如

[1,1,1,2,2,2,2,2,2,3,3,4]

所以它变成了这样的运行

[[1,1,1],[2,2,2,2,2],[

3,3],[ 4]]

有没有一种巧妙的方法可以做到这一点?

我一直在学习:流变换,Stream.take_while,Enum.split_while,枚举分区,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]]]

容易!

相关内容

  • 没有找到相关文章

最新更新