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} 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/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]]

关于Elixir:如何从列表创建一对元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50809235/

相关文章:

elixir - 继承 Phoenix/Elixir 中的布局

elixir - 更改 Phoenix 中运行时的依赖关系

elixir - 在 Elixir 中如何将函数作为参数传递?

validation - 为什么 Changeset.change 在 Elixir 中跳过验证?

elixir - 我应该如何管理插入相关表

elixir - 二进制模式匹配到列表

Elixir:方法参数被视为函数

elixir - 在 Ecto 中对 OR 进行条件验证 - 需要 2 个字段中的 1 个

elixir - 迁移是重复的,但实际上不是

elixir - mix.compile 返回错误 (Mix) 无法编译 "src/gettext_po_parser.yrl"因为找不到应用程序 "parsetools"