문제

각 튜플의 두 번째 요소에 따라 튜플을 정렬해야하지만 분명히 USORT/1은 첫 번째 요소와 만 작동합니다. 그래서 나는 요소를 교환하고, 그것들을 사용하고, 다시 교체해야합니까? 더 쉬운 방법이 있습니까? 또한 내림차순으로 정렬 할 수있는 방법이 있습니까 (정렬과 반전이 수행 될 수는 있지만 알고 싶다는 것을 알고 있습니다).

도움이 되었습니까?

해결책

당신은 시도 했습니까? 키 소트/2 기능 (또는 그 상대 ukeysort/2)?

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

큰 목록을 정렬하지 않으면 아마도 가장 읽기 쉬운 솔루션 일 것입니다.

다른 팁

실제로 더 나은 답변 :

정렬 기능을 취하는 두 번째 버전의 종류가 있습니다.

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).

컴파일러는 A1과 B1보다 밑줄이 더 좋습니다. 컴파일러는 그에 대한 경고를 제공하기 때문입니다.

내림차순으로 정렬하려면 <= to> =를 변경하십시오.

자신의 정렬 기능을 작성하는 것은 너무 어렵지 않아야합니다 (공통 예에서 적응) :

qsort([]) -> [];
qsort([Pivot|Tail]) ->
    {PivotFirst, PivotSecond} = Pivot,
    qsort([{FirstElement, SecondElement} || {FirstElement,SecondElement} <- Tail, SecondElement < PivotSecond])
        ++ [Pivot] ++
        qsort([{FirstElement, SecondElement} || {FirstElement,SecondElement} <- Tail, SecondElement >= PivotSecond]).
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top