Elixir可枚举的块:如何将列表划分为根据n的倍数划分的子列表

时间:2018-03-22 20:48:12

标签: elixir

假设我在Elixir中有一个严格增加整数的列表,我想在数字大于5的倍数时分解为子列表。我正在尝试使用chunk_by但是我明白了:

{{1}}

当我真正想要的是:

{{1}}

我基本上需要在“5边界”上分解列表但没有边界本身创建单独的列表。我该怎么做?

1 个答案:

答案 0 :(得分:5)

您需要返回div(x, 5)而不是rem(x, 5) == 0。只要div(x, 5)的结果发生变化,就意味着该值应该在新列表中。

iex(1)> Enum.chunk_by(300..320, fn x -> div(x, 5) end)
[
  [300, 301, 302, 303, 304],
  [305, 306, 307, 308, 309],
  [310, 311, 312, 313, 314],
  [315, 316, 317, 318, 319],
  [320]
]
iex(2)> Enum.chunk_by([200, 201, 204, 207, 220, 226, 228], fn x -> div(x, 5) end)
[[200, 201, 204], [207], [220], [226, 228]]