Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 在Elixir中,如何按值对关键字列表排序?_List_Sorting_Elixir - Fatal编程技术网

List 在Elixir中,如何按值对关键字列表排序?

List 在Elixir中,如何按值对关键字列表排序?,list,sorting,elixir,List,Sorting,Elixir,我试图开发一个简单的POC在长生不老药,需要在地图中存储信息。问题是我不知道如何将地图显示为按值排序的列表 defmodule MapUpdater do def update_score(map, player, :double), do: Map.update(map, player, 2, &(&1 * 2)) def update_score(map, player, :halve), do: Map.update(map, player, .5, &am

我试图开发一个简单的POC在长生不老药,需要在地图中存储信息。问题是我不知道如何将地图显示为按值排序的列表

defmodule MapUpdater do
    def update_score(map, player, :double), do: Map.update(map, player, 2, &(&1 * 2))
    def update_score(map, player, :halve), do: Map.update(map, player, .5, &(&1 * 0.5))
    def update_score(map, player, :penalize), do: Map.update(map, player, -1, &(&1 - 1))
    def view_scores(map, :top), do: Map.to_list(map) |> Enum.sort_by(???)
    def view_scores(map, :bottom), do: Map.to_list(map) |> Enum.sort_by(???)
end
我试过:

Enum.sort_by(&(elem(&1, 1)) > &(elem(&2, 1)))

这方面有很多变化,但反复阅读文档对我没有帮助。有什么建议吗?

Enum.sort_by/2
接受一个arity one函数,该函数根据调用每个元素的函数返回的值对输入进行排序,因此应该是
|>Enum.sort_by(&(elem(&1,1))

还有一种更优雅的方法,可以根据元组中某个元素的值对元组列表进行排序:
List.keysort/2

iex(3)> list |> List.keysort(1)
[e: -1, c: 0, a: 1, b: 2, d: 3]

谢谢我不知道该怎么做,但这很容易。你能解释一下这种签名的确切含义吗<代码>排序依据(enumerable、mapper、sorter\\&
mapper
是将在
enumerable
的每个项目上调用的函数。
mapper
返回的值将使用
进行比较,我远远不能给您提供建议,但是如果您不介意,您可以将您在回答中提到的函数链接到文档,而ch a)使未来的访问者更容易理解答案,b)因为额外的奖励将发现所有的东西,比如带有附加参数的函数的算术。
iex(3)> list |> List.keysort(1)
[e: -1, c: 0, a: 1, b: 2, d: 3]