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 基于元组的第二个元素对列表进行排序_List_Sorting_Erlang_Tuples - Fatal编程技术网

List 基于元组的第二个元素对列表进行排序

List 基于元组的第二个元素对列表进行排序,list,sorting,erlang,tuples,List,Sorting,Erlang,Tuples,我有一本字典,想把它转换成一个列表。然后,我想根据第二个元素(Value),将由{Key,Value}对组成的结果列表从min到max进行排序 列表是否有内置的排序方法来处理此问题,或者如何处理 谢谢按照第二个元素进行排序的最简单方法是定义您自己的排序功能,该功能可以按如下方式工作: fun({KeyA,ValA}, {KeyB,ValB}) -> {ValA,KeyA} =< {ValB,KeyB} end. 这是因为Erlang将始终自动比较元组从第一个元素到最后一个元素。此函

我有一本字典,想把它转换成一个列表。然后,我想根据第二个元素(Value),将由{Key,Value}对组成的结果列表从min到max进行排序

列表是否有内置的排序方法来处理此问题,或者如何处理


谢谢

按照第二个元素进行排序的最简单方法是定义您自己的排序功能,该功能可以按如下方式工作:

fun({KeyA,ValA}, {KeyB,ValB}) -> {ValA,KeyA} =< {ValB,KeyB} end.
这是因为Erlang将始终自动比较元组从第一个元素到最后一个元素。此函数交换第一个和第二个元素,使第二个元素作为第一个比较点。然后,dict中的键将用于对值相同的条目进行排序。

该函数非常适合这种情况

1>列出:键排序(2,[{a,b},{b,a},{b,b}])。

[{b,a},{a,b},{b,b}]

2>列表:键排序(2,[{1,14},{3,10},{2,13}])。


[{3,10},{2,13},{1,14}]

1。这对[{1,14},{3,10},{2,13}的键值对有效吗?整数?谢谢这对任何值都有效。Erlang术语总是可以相互比较的。如果您的元组有两个值,并且希望第二个值前导,则上面的函数将涵盖这些情况。您可以尝试一下并查看。再次感谢您的帮助。非常感谢。
[Key |{Key,_Val}@elgolondrino这基本上只是返回所有键的列表。但是,您收到的错误是因为您使用了原子名称,如
key\u Y
。变量需要使用区分大小写的
key
。小写=atom,大写=variable.Awesome。完全忽略了这一点。:/I是否要排序并返回第一个元素的列表?因为不能过早放弃排序元素的性质。因此,必须将其分为两个步骤;排序,然后运行:
[Key |{Key,Value}向上投票。对于这种情况,您的函数是正确的。我将保留我的答案,因为如果值相等,它也将完成对键的排序。
1> lists:sort(fun({KeyA,ValA}, {KeyB,ValB}) -> {ValA,KeyA} =< {ValB,KeyB} end., [{a,b},{b,a},{b,b}]).
[{b,a},{a,b},{b,b}]