Elixir:按名称对列表进行排序

Edw*_*ted 0 elixir

我是否可以在 Elixir 中执行此操作,例如对命名列表进行排序?

list = [9,1,2,3]
Enum.sort(list)
Run Code Online (Sandbox Code Playgroud)

生产

[1,2,3,9]
Run Code Online (Sandbox Code Playgroud)

因为我不知道列表中有哪些数字,所以无法具体输入。

bla*_*bla 5

如果通过对命名列表进行排序,您打算就地排序,我相信这是不可能的,因为值在 elixir 中是不可变的。

但是,您可以重新绑定原始变量,使其指向新值:

iex(1)> l = [9,1,2,3]
[9, 1, 2, 3]
iex(2)> l = Enum.sort(l)
[1, 2, 3, 9]
iex(3)> l
[1, 2, 3, 9]
Run Code Online (Sandbox Code Playgroud)

如果你的意思是命名列表keyword,你也可以使用它进行排序Enum.sort/2。要按值对关键字进行排序,您可以执行以下操作:

iex(1)> k = [a: 32, b: 15] 
[a: 32, b: 15]
iex(2)> Keyword.keyword?(k)
true
iex(3)> Enum.sort(k, fn({_, v1}, {_, v2}) -> v1 <= v2 end)
[b: 15, a: 32]
Run Code Online (Sandbox Code Playgroud)