ソート
TypeScriptでソート(並び替え)を実装する方法について解説
ソートとは
ソートとはデータの順序を整える操作のことです。一般的には数値や文字列の配列を昇順または降順に並べ替えることを指します。
TypeScriptではどのようにソートを実装できるか紹介します。
ソートの実装例
Loading...
「実行」ボタンをクリックすると、ここに結果が表示されます
はい。組み込み実装があるので非常に簡単にソートが実装できます。実行環境や要件によっては他のアルゴリズムの方を使うこともありますが、基本的にはこの方法で十分です。
sort()メソッドについてもう少し詳しく
詳細はこちらを参照してください。この中から個人的にためになった・具体的に覚えておいた方がいい点をいくつか紹介します。
- デフォルトでは比較は文字列として行われる
- sort()に比較関数を渡さなくても実行できますが、デフォルトのソートでは文字列として比較されるため数値のソートでは意図しない結果になることがあります。比較関数を省略する場合は注意が必要です。直感的には1, 2...10の順番で並ぶことを期待しますが、文字列として比較されるため"10"が"2"よりも前に来てしまいます。辞書順というもので、"あ", "あい", "い"の順番に並ぶようなものです。
文字列として比較される例
Loading...「実行」ボタンをクリックすると、ここに結果が表示されます - 基本的に昇順に並べ替えられる
- sort()に渡す比較関数は-1, 0, 1のどれかを返す必要があります。結果としてどの順番で並ぶのか一見してわかりにくいですが、昇順として並び替えられると考えると-1が「aがbより前に来る」、1が「aがbより後に来る」と理解しやすいです。
比較関数の考え方
Loading...「実行」ボタンをクリックすると、ここに結果が表示されます - 元の配列が変更される
- sort()は元の配列を変更します。このことを忘れていると、バグの原因になることがあります。sort()だけでなくreverse()やsplice()などの配列操作関数も同様に元の配列を変更してしまいます。元の配列を保持したい場合はあらかじめコピーを作成しておくか、コピーメソッドを使用してください。
元の配列が変更される例
Loading...「実行」ボタンをクリックすると、ここに結果が表示されますただし、配列をコピーするということはメモリを余分に消費することになるため、大量のデータを扱う場合は注意が必要です。一長一短ですね。配列のコピーとコピーメソッド
Loading...「実行」ボタンをクリックすると、ここに結果が表示されます
まとめ
TypeScriptでソートを実装するには配列のsort()メソッドを使用します。比較関数を適切に指定することで数値や文字列の昇順・降順のソートが可能です。 ただし、sort()メソッドは元の配列を変更したり、比較関数を省略すると意図しない結果になることがあるため注意が必要です。 また、ソートの順番がどのような順番になるのかを正確に理解しておくと実装時に迷わなくて済むことでしょう。