我知道我可以通过这样做在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方法还是有一些更有效的方法来处理奇数长度列表?
如果包含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)
在浏览了文档并在其他地方搜索之后,我仍然没有找到内置的解决方案,但是我确实遇到了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)