stream - Elixir:流式传输

标签 stream elixir

我要 一个列表(预先排序),例如

[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 - Elixir:流式传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28267278/

相关文章:

java - 如何优化 Java 和流 vector 中的 3D xyz 嵌套循环?

java - java如何在内部将任何类型的文件(图像、pdf等)转换为字节数组?

python - 当 header 是动态的时,避免将批量数据导出到 csv

elixir - Phoenix channel : send push to a particular client

unit-testing - Elixir:测试 GenEvent 的错误报告

java - 当我不知道文件流在哪里打开时,有什么方法可以关闭它吗?

node.js - 如何在nodejs中将多个转换流合并为一个

javascript - js文件中的eex语法或Phoenix代码

elixir - 显示模板中结构体的每个元素

elixir - IO.puts 与 IO.inspect