将列表的反向版本连接到原始列表的最惯用的方法是什么?所以:
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).()
您知道达成此目的的惯用方式吗?
答案 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]