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

时间:2010-12-06 19:25:35

标签: list sorting erlang tuples

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

列表是否有内置的排序方法来处理这个或者如何做到这一点?

由于

2 个答案:

答案 0 :(得分:11)

函数lists:keysort/2就像手套一样。

1> lists:keysort(2, [{a,b},{b,a},{b,b}]).

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

2> lists:keysort(2, [{1,14},{3,10},{2,13}]).

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

答案 1 :(得分:6)

按第二个元素排序的最简单方法是定义自己的排序函数,该函数可以按如下方式工作:

fun({KeyA,ValA}, {KeyB,ValB}) -> {ValA,KeyA} =< {ValB,KeyB} end.

并在lists:sort/2中调用它:

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}]

这是因为Erlang将始终自动比较从第一个元素到最后一个元素的元组。此函数交换第一个和第二个元素,因此第二个元素作为第一个比较点。然后,您的dict中的Key将用于订购值相同的条目。