Elixir:如何从List创建一对元素

时间:2018-06-12 04:25:57

标签: elixir

给定具有单个元素的Elixir列表,如何最好地创建具有相邻元素对的列表? 这适用于任何列表,而不仅仅包含数字。

输入:[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7]]

输出: > {[_|list],_} = Enum.map_reduce([1, 2, 3, 4, 5, 6, 7], nil, fn(x, acc) -> {[acc,x], x} end) {[[nil, 1], [1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7]], 7} > list [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7]]

以下解决方案有效,但对我来说看起来很笨拙。

有更好/更简单的方法吗?

uri

2 个答案:

答案 0 :(得分:3)

使用Enum.chunk_every/4

Enum.chunk_every([1,2,3,4,5,6,7], 2, 1, :discard)
#⇒ [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7]]

答案 1 :(得分:2)

出于好奇:

with [_|rotated] = list <- [1,2,3,4,5,6,7],
  do: list |> Enum.zip(rotated) |> Enum.map(&Tuple.to_list/1)
#⇒ [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7]]

NB 我发布这个作为另一个答案,因为一般来说它比接受的更差,但它显示了非常不同的方法,可能在没有现成的时候采用Enum现有功能开箱即用。