lists:keysort/3
对元组列表进行排序
用法:
keysort(N, TupleList1) -> TupleList2
内部实现:
-spec keysort(N, TupleList1) -> TupleList2 when
N :: pos_integer(),
TupleList1 :: [Tuple],
TupleList2 :: [Tuple],
Tuple :: tuple().
keysort(I, L) when is_integer(I), I > 0 ->
case L of
[] -> L;
[_] -> L;
[X, Y | T] ->
case {element(I, X), element(I, Y)} of
{EX, EY} when EX =
case T of
[] ->
L;
[Z] ->
case element(I, Z) of
EZ when EY =
L;
EZ when EX =
[X, Z, Y];
_EZ ->
[Z, X, Y]
end;
_ when X == Y ->
keysort_1(I, Y, EY, T, [X]);
_ ->
keysplit_1(I, X, EX, Y, EY, T, [], [])
end;
{EX, EY} ->
case T of
[] ->
[Y, X];
[Z] ->
case element(I, Z) of
EZ when EX =
[Y, X | T];
EZ when EY =
[Y, Z, X];
_EZ ->
[Z, Y, X]
end;
_ ->
keysplit_2(I, X, EX, Y, EY, T, [], [])
end
end
end.
keysort_1(I, X, EX, [Y | L], R) when X == Y ->
keysort_1(I, Y, EX, L, [X | R]);
keysort_1(I, X, EX, [Y | L], R) ->
case element(I, Y) of
EY when EX =
keysplit_1(I, X, EX, Y, EY, L, R, []);
EY ->
keysplit_2(I, X, EX, Y, EY, L, R, [])
end;
keysort_1(_I, X, _EX, [], R) ->
lists:reverse(R, [X]).
对元组列表 TupleList1 里按元组的第 N 个值进行排序,最后返回排序后的新元组列表 TupleList2
TupleList = [{a, 3}, {b, 4}, {c, 1}, {d, 2}],
lists:keysort(2, TupleList).