我有一个字典,想要将它转换为列表。然后我想根据第二个元素(Value)从小到大对由{Key,Value}对组成的结果列表进行排序。
是否有内置的列表排序方法来处理这个问题,或者该如何处理?
谢谢
这个问题可以使用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}]
按第二个元素排序的最简单方法是定义一个自己的排序函数,其工作方式如下:
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}]
[Key || {Key, _Val} <- List].
- I GIVE TERRIBLE ADVICEkey_Y
这样的原子名称。变量需要使用KeyY
,其中它们区分大小写。小写=原子,大写=变量。 - I GIVE TERRIBLE ADVICE
[ Key || {Key,Value} <- L ]
或相应的 lists:map/2 函数。 - D.Nibon