Elixir:如何从列表中创建一对元素

Elixir:如何从列表中创建一对元素,elixir,Elixir,给定一个包含单个元素的长生不老药列表,如何最好地创建包含成对相邻元素的列表? 这应该适用于任何列表,而不仅仅是包含数字 输入:[1,2,3,4,5,6,7] 输出:[[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} e

给定一个包含单个元素的长生不老药列表,如何最好地创建包含成对相邻元素的列表? 这应该适用于任何列表,而不仅仅是包含数字

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

输出:
[[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]]
使用:

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]]
只是出于好奇:

with[| rotated]=list Enum.zip(rotated)|>Enum.map(&Tuple.to_list/1)
#⇒ [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7]]
NB我将此作为另一个答案发布,因为一般来说,它比公认的答案更糟糕,但它显示了非常不同的方法,当没有现成的
Enum
函数时,可能会采取这种方法