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

Tho*_*wne 0 elixir

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

Enum.chunk_by([300, 301, 304, 305, 306, 309, 310, 311, 312, 313, 314, 
315, 316, 317, 319, 320], fn(x) -> rem(x, 5) == 0 end)

 [
  [300],
  [301, 304],
  [305],
  [306, 309],
  [310],
  [311, 312, 313, 314],
  [315],
  [316, 317, 319],
  [320]
]
Run Code Online (Sandbox Code Playgroud)

当我真正想要的是:

[
  [300, 301, 304],
  [305, 306, 309],
  [310, 311, 312, 313, 314],
  [315, 316, 317, 319],
  [320]
]
Run Code Online (Sandbox Code Playgroud)

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

Dog*_*ert 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]]
Run Code Online (Sandbox Code Playgroud)