Elixir:惯用地克隆列表

Ale*_*lov 0 copy list elixir

我总是可以做这样的事情:

new_list = Enum.map(old_list, fn x -> x end)
Run Code Online (Sandbox Code Playgroud)

当然,还有更多的平等或略微丑陋的方法。不知何故,我找不到复制列表的惯用方式。当然一定有办法。

Ada*_*hip 7

Elixir是一门不变的语言,所以惯用的方式是这样的:

clone = original
Run Code Online (Sandbox Code Playgroud)

无需“克隆”。分配给现有变量的数据无法编辑,因此从概念上将一个变量分配给另一个变量将得到数据的副本。您无法编辑现有数据-如果您重新分配给现有变量,则从概念上讲该变量指向新的数据结构。

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")
Run Code Online (Sandbox Code Playgroud)

输出:

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]
Run Code Online (Sandbox Code Playgroud)