我总是可以做这样的事情:
new_list = Enum.map(old_list, fn x -> x end)
当然,还有更多的同样或更丑陋的方法。不知何故,我找不到复制列表的惯用方式。当然一定有办法。
答案 0 :(得分:7)
长生不老药是一门不变的语言,所以惯用的方式是这样的:
clone = original
没有必要“克隆”。分配给现有变量的数据无法编辑,因此从概念上将一个变量分配给另一个变量将得到数据的副本。您无法编辑现有数据-如果您重新分配给现有变量,则从概念上讲就是将该变量指向新的数据结构。
original = [1, 2, 3] |> IO.inspect(label: "original")
clone = original |> IO.inspect(label: "clone")
prepended = [0 | original] |> IO.inspect(label: "prepended")
original |> IO.inspect(label: "original again")
original = [5, 6, 7] |> IO.inspect(label: "original rebound")
clone |> IO.inspect(label: "clone again")
输出:
original: [1, 2, 3]
clone: [1, 2, 3]
prepended: [0, 1, 2, 3]
original again: [1, 2, 3]
original rebound: [5, 6, 7]
clone again: [1, 2, 3]
答案 1 :(得分:1)
由于Elixir中的数据结构是不可变的,所以我想不出您需要“克隆”列表的原因。它什么也不会做。话虽这么说,如果您正在寻找一种方法来完全不进行任何操作,则可以达到Enum.to_list/1
。
iex> Enum.to_list([1, 2, 3])
[1, 2, 3]