4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

草莽Erlang ── 28. lists:sort

Last updated at Posted at 2023-01-17

口で言うより行うことがErlang習得への近道と信じています。

異なる型の比較

Erlangではどんな型の組み合わせでも大小の比較判定が可能です。

number < atom < reference < function < port < pid < tuple < map < list < bitstring

lists:sort/1

sort([term]) -> [term]
sort(リスト) -> ソートされたリスト

リストをソートして新しいリストを返します。どんなリストに対しても実行可能です。

> lists:sort([2, 1, 4, 3]).
[1,2,3,4]

> lists:sort([2.0, 1.0, 4.0, 3.0]).
[1.0,2.0,3.0,4.0]

> lists:sort([[5], #{x => 4.0}, <<6>>, {3}, two, 1]).
[1,two,{3},#{x => 4.0},[5],<<6>>]

結果から重複する要素を取り除きたい場合は、代わりにlists:usort/1を使います。

> lists:usort([2, 1, 4, 3, 1, 2]).
[1,2,3,4]

lists:sort/2

sort(fun((A::term, B::term) -> boolean), [term]) -> [term]
sort(オレオレ大小比較関数, リスト) -> ソートされたリスト

オレオレ大小比較ルールでリストのソートができます。どんなリストに対しても実行可能です。オレオレ大小比較関数は、AとBとを比較して小さいか等しい場合にtrueを、それ以外の場合にfalseを返すようにします。

% 降順でソート
> lists:sort(fun (A, B) -> B =< A end, [2, 1, 4, 3, 2, 1]).
[4,3,2,2,1,1]

% '闘魂'アトムが必ず前に来るような並び順
> ToukonFirst = fun ('闘魂', _) -> true; (_, '闘魂') -> false; (A, B) -> A =< B end.
#Fun<erl_eval.41.3316493>

> lists:sort(ToukonFirst, [2, 1, '闘魂', 3, '闘魂']).
['闘魂','闘魂',1,2,3]

結果から重複する要素を取り除きたい場合は、代わりにlists:usort/2を使います。

> lists:usort(fun (A, B) -> B =< A end, [2, 1, 4, 3, 2, 1]).
[4,3,2,1]

lists:keysort/2

keysort(integer, [tuple]) -> [tuple]
keysort(タプルの要素の位置, タプルのリスト) -> ソートされたタプルのリスト

タプルのリストをソートして新しいリストを返します。 ソートはタプルの指定された位置の要素に対して行われます。

> L1 = [{"B", 3}, {"C", 1}, {"A", 2}, {"A", 2}].

% 1番目の要素でソート
> lists:keysort(1, L1).
[{"A",2},{"A",2},{"B",3},{"C",1}]

% 2番目の要素でソート
> lists:keysort(2, L1).
[{"C",1},{"A",2},{"A",2},{"B",3}]

結果から重複する要素を取り除きたい場合は、代わりにlists:ukeysort/2を使います。

> lists:ukeysort(1, L1).
[{"A",2},{"B",3},{"C",1}]

> lists:ukeysort(2, L1).
[{"C",1},{"A",2},{"B",3}]

listsモジュールには他にもリスト処理のための関数がたくさんあります。

Elixirにも挑戦したい

闘魂ElixirシリーズとElixir Schoolがオススメです。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?