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
Erlang 列表:元组中第n个元素的usort_Erlang_Sorting - Fatal编程技术网

Erlang 列表:元组中第n个元素的usort

Erlang 列表:元组中第n个元素的usort,erlang,sorting,Erlang,Sorting,我需要根据每个元组的第二个元素对元组进行排序,但显然usort/1只适用于第一个元素。所以我必须交换元素,对它们进行排序,然后再交换回来。有没有更简单的方法?还有没有按降序排序的方法(我知道可以进行排序和反转,但我只是想知道)。编写自己的排序函数应该不会太难(改编自一个常见示例): qsort([])->[]; qsort([Pivot|Tail])-> {PivotFirst,PivotSecond}=Pivot, qsort([{FirstElement,SecondElement}|{Fi

我需要根据每个元组的第二个元素对元组进行排序,但显然usort/1只适用于第一个元素。所以我必须交换元素,对它们进行排序,然后再交换回来。有没有更简单的方法?还有没有按降序排序的方法(我知道可以进行排序和反转,但我只是想知道)。

编写自己的排序函数应该不会太难(改编自一个常见示例):

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