プログラミングElixir読み途中です。
引っかかりそうなところがあったのでメモしておきます。
Enum.sort/2
の第二引数には、同じ値の場合は true
を返すようなを関数を渡さないと安定ソートになりません。
iex> words = ["some","kind","of","monster"]
["some", "kind", "of", "monster"]
iex> Enum.sort words, &(String.length(&1) < String.length(&2))
["of", "kind", "some", "monster"]
iex> Enum.sort words, &(String.length(&1) <= String.length(&2))
["of", "some", "kind", "monster"]
Enum.sort_by/3
でも同様です。
iex> words = ["some","kind","of","monster"]
["some", "kind", "of", "monster"]
iex> Enum.sort_by words, &String.length/1, &</2
["of", "kind", "some", "monster"]
iex> Enum.sort_by words, &String.length/1, &<=/2
["of", "some", "kind", "monster"]
Enum.html#sort/2 の Example には、このことが書いていますが、sort_byの方は特に何も書いてないので… sort
の方も見ろやってことですかね(´・ω:;.:...
Enum.sort/2 not stable · Issue #2163 · elixir-lang/elixirのコメントにも書いてますが、自分もつい >=
や <=
より >
や <
を使うことが多いので気をつけます(`・ω・´)ゞ