反向并连接列表

时间:2019-06-06 09:05:00

标签: elixir

将列表的反向版本连接到原始列表的最惯用的方法是什么?所以:

Input:  [1, 2, 3], which is the output of my_func()
Output: [1, 2, 3, 3, 2, 1]

可以通过一种不太惯用的方式实现这一目标:

n = my_func() # returns e.g. [1, 2, 3]
n_reversed = Enum.reverse(n)
n_combined = Enum.concat(n, n_reversed)

我在想这样的事情(不起作用):

my_func() |> Enum.concat(Enum.reverse(&(&1)))

此解决方案确实有效,但对我来说却不是很习惯:

n |> Enum.reverse() |> (fn enum -> Enum.concat(n, enum) end).()

您知道达成此目的的惯用方式吗?

2 个答案:

答案 0 :(得分:4)

我想说使用++运算符而不是Enum.concat会更惯用。 (请注意,++要求参数为列表,而Enum.concat可接受任何可枚举的类型。)

n_combined = n ++ Enum.reverse(n)

答案 1 :(得分:2)

如果您经常这样做,并且试图避免两次写入变量名以保持正弦,那么可以将其包装在函数中。

def reverse_concat(list), do: list ++ Enum.reverse(list)

然后类似

my_func() |> reverse_concat()

产生

[1, 2, 3, 3, 2, 1]