我是否可以在 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)
因为我不知道列表中有哪些数字,所以无法具体输入。
如果通过对命名列表进行排序,您打算就地排序,我相信这是不可能的,因为值在 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)