ソート (文字列の並べ替え)
文字列を特定の順序 (辞書順、Unicode 順、ロケール依存順など) に並べ替える処理。言語や文化によって「正しい順序」が異なるため、国際化対応では照合順序の設定が重要。
ソート (sort、並べ替え) は、文字列のリストを特定の順序に整列する処理です。ファイル名の一覧、連絡先の名前、辞書の見出し語、検索結果のランキングなど、テキストデータを扱うあらゆる場面でソートが使われています。しかし、「正しい順序」は言語や文化によって異なるため、国際化対応のソートは見た目以上に複雑です。
最も単純なソートは Unicode のコードポイント順です。JavaScript の Array.sort() はデフォルトでこの方式を使います。しかし、コードポイント順では「Z」(U+005A) が「a」(U+0061) より前に来るため、大文字と小文字が混在するリストでは直感に反する結果になります。数字の文字列も「1, 10, 2, 20, 3」のように辞書順でソートされ、数値順にはなりません。
日本語のソートは特に複雑です。漢字の並び順には「音読み順」「訓読み順」「部首画数順」「JIS コード順」など複数の基準があり、どれを使うかは用途によって異なります。電話帳は読みの五十音順、漢和辞典は部首画数順、JIS 規格は区点コード順です。同じ漢字でも複数の読みがあるため (例: 「生」は「せい」「しょう」「なま」「いきる」)、読みに基づくソートには読み仮名のデータが必要です。
ICU (International Components for Unicode) ライブラリは、ロケール依存のソートを実現する業界標準です。JavaScript の Intl.Collator は ICU に基づいており、new Intl.Collator('ja').compare(a, b) で日本語の自然な順序でソートできます。ドイツ語では「ä」を「a」の後に置くか「ae」として扱うかがロケールによって異なり、Intl.Collator はこうした言語固有のルールを正しく処理します。
自然順ソート (natural sort) は、文字列中の数字を数値として解釈するソート方式です。「file1, file2, file10」を辞書順でソートすると「file1, file10, file2」になりますが、自然順ソートでは「file1, file2, file10」と数値順に並びます。ファイル名やバージョン番号のソートで直感的な結果を得るために使われます。
文字数カウントとの関連では、ソートキーの生成に文字列の正規化が必要になることがあります。全角と半角の統一、濁点・半濁点の処理、大文字・小文字の統一など、ソート前の前処理で文字列が変換されると文字数が変わる場合があります。ソート結果の表示では、元の文字列 (変換前) を使い、ソートキー (変換後) は内部処理にのみ使用するのが一般的です。