【问题标题】:Elixir: How to create a pair of elements from ListElixir:如何从 List 创建一对元素
【发布时间】:2018-06-12 13:17:26
【问题描述】:

给定一个包含单个元素的 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]]

【问题讨论】:

    标签: elixir


    【解决方案1】:

    使用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]]
    

    【讨论】:

      【解决方案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 功能开箱即用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-18
        • 2021-04-20
        • 1970-01-01
        • 1970-01-01
        • 2011-02-17
        • 2022-10-13
        相关资源
        最近更新 更多