Erlang 列表:元组中第n个元素的usort
我需要根据每个元组的第二个元素对元组进行排序,但显然usort/1只适用于第一个元素。所以我必须交换元素,对它们进行排序,然后再交换回来。有没有更简单的方法?还有没有按降序排序的方法(我知道可以进行排序和反转,但我只是想知道)。编写自己的排序函数应该不会太难(改编自一个常见示例):Erlang 列表:元组中第n个元素的usort,erlang,sorting,Erlang,Sorting,我需要根据每个元组的第二个元素对元组进行排序,但显然usort/1只适用于第一个元素。所以我必须交换元素,对它们进行排序,然后再交换回来。有没有更简单的方法?还有没有按降序排序的方法(我知道可以进行排序和反转,但我只是想知道)。编写自己的排序函数应该不会太难(改编自一个常见示例): qsort([])->[]; qsort([Pivot|Tail])-> {PivotFirst,PivotSecond}=Pivot, qsort([{FirstElement,SecondElement}|{Fi
qsort([])->[];
qsort([Pivot|Tail])->
{PivotFirst,PivotSecond}=Pivot,
qsort([{FirstElement,SecondElement}|{FirstElement,SecondElement}实际上,一个更好的答案:
sort的第二个版本具有排序功能:
lists:sort(Fun, List1) -> List2
下面是一个根据元组中的第二个元素进行排序的示例:
lists:sort(fun(A, B) ->
{A1, A2} = A,
{B1, B2} = B,
if
A2 > B2 ->
false;
true ->
true
end
end, YourList).
bmdhacks解决方案的改进版本:
lists:sort(fun(A, B) ->
{_, A2} = A,
{_, B2} = B,
A2 =< B2
end, YourList).
列表:排序(乐趣(A,B)->
{uu2}=A,
{uuB2}=B,
A2=
下划线比A1和B1更好,因为编译器会给出警告
为了那些
要按降序排序,只需更改=。是否尝试过函数(或其对应项)
如果你不给很大的列表排序,这可能是你能得到的最可读的解决方案
lists:sort(fun(A, B) ->
{_, A2} = A,
{_, B2} = B,
A2 =< B2
end, YourList).
> lists:reverse(lists:keysort(2, [{a,2}, {b,1}, {c, 3}])).
[{c,3},{a,2},{b,1}]