漢字には五十音のような固定の「アルファベット順」が存在しない。「山田」と「川田」のどちらが先に来るべきかは、文字コード順では決まらず、実際の辞書や名簿は読み仮名(やまだ、かわだ)に基づいて並べる。そのため漢字を含む行をUnicodeのコードポイント順でソートしても、日本語話者が期待する「五十音順」にはまず一致しない。
アルファベット順と数値順の違い
アルファベット順(辞書式)ソートは、文字列をテキストとして文字ごとに比較します。そのため、文字列"10"は"9"より前に来ます。文字"1"が辞書順で"9"より小さいからです — ソートはそれが数値であることを「理解」していません。数値順ソートはこれとは対照的に、比較する前に文字列を数値としてパースするため、期待通りの順序9、10、11が得られます。
ソート時の大文字小文字の区別
ほとんどのシステムでは、大文字は小文字より辞書順で前に来ます(文字コードのため)。そのため、大文字小文字を区別するソートでは"Zebra"が"apple"より前に来ることがあります。大文字小文字を区別しないソートは、比較のために文字列をまず同じ大文字小文字に正規化しつつ、結果では元の大文字小文字を保持します。
重複排除
重複排除は繰り返される行を文字ごとに比較して削除し、意味では判断しません。ここで重要な細かい点は、大文字小文字と空白の区別です。文字列"テキスト"と"テキスト "(末尾に余分な空白がある)は技術的には異なり、比較前の追加の正規化なしにはマージされません。
この機能が必要な理由
- インポート前にメールアドレスやURLのリストから重複エントリを削除する。
- バージョンやIDのリストをテキストではなく数値としてソートする。
- 2つのリストを同じソート形式にすることで、2つのデータセットを素早く比較する。
自然順ソート(natural sort)
自然順ソートは、アルファベット順と数値順の中間的なアプローチです: 文字列内の連続した数字を数値として認識し、それ以外の部分はテキストとして比較します。これによりfile2.txtはfile10.txtより前に来ます — 形式的にはこれらは独立した数値ではなく文字列ですが、テキストの接頭辞を持つファイル名やバージョン番号に便利です。