拆分两个相等的列表(±1)

She*_*yar 7 elixir

我知道我可以通过这样做在elixir中将两个相等的一半分成一个偶数列表:

list   = [1, 2, 3, 4, 5, 6]
len    = length(list)/2 |> round

[a, b] = Enum.chunk(list, len)            # => [[1, 2, 3], [4, 5, 6]]
Run Code Online (Sandbox Code Playgroud)

但是内置了ruby-esque方法还是有一些更有效的方法来处理奇数长度列表?

Gaz*_*ler 9

如果包含4th(pad)参数,Enum.chunk实际上需要4个参数并且将使用奇数长度列表:

iex(14)> Enum.chunk([1,2,3,4,5], 3, 3, [])
[[1, 2, 3], [4, 5]]
Run Code Online (Sandbox Code Playgroud)


She*_*yar 5

在浏览了文档并在其他地方搜索之后,我仍然没有找到内置的解决方案,但是我确实遇到了Enum.split/2。此方法似乎更适合划分奇数长度的列表,但返回a tuple而不是列表列表。

我仍然不知道这有多有效。

例:

def split(list) do
  len = round(length(list)/2)
  Enum.split(list, len)
end


split([1, 2, 3, 4])        # => {[1, 2], [3, 4]}
split([5, 6, 7, 8, 9])     # => {[5, 6, 7], [8, 9]}
Run Code Online (Sandbox Code Playgroud)