すべての記事

行のソート:アルファベット順と数値順はなぜ違うのか

漢字には五十音のような固定の「アルファベット順」が存在しない。「山田」と「川田」のどちらが先に来るべきかは、文字コード順では決まらず、実際の辞書や名簿は読み仮名(やまだ、かわだ)に基づいて並べる。そのため漢字を含む行をUnicodeのコードポイント順でソートしても、日本語話者が期待する「五十音順」にはまず一致しない。

アルファベット順と数値順の違い

アルファベット順(辞書式)ソートは、文字列をテキストとして文字ごとに比較します。そのため、文字列"10""9"より前に来ます。文字"1"が辞書順で"9"より小さいからです — ソートはそれが数値であることを「理解」していません。数値順ソートはこれとは対照的に、比較する前に文字列を数値としてパースするため、期待通りの順序9、10、11が得られます。

ソート時の大文字小文字の区別

ほとんどのシステムでは、大文字は小文字より辞書順で前に来ます(文字コードのため)。そのため、大文字小文字を区別するソートでは"Zebra""apple"より前に来ることがあります。大文字小文字を区別しないソートは、比較のために文字列をまず同じ大文字小文字に正規化しつつ、結果では元の大文字小文字を保持します。

重複排除

重複排除は繰り返される行を文字ごとに比較して削除し、意味では判断しません。ここで重要な細かい点は、大文字小文字と空白の区別です。文字列"テキスト""テキスト "(末尾に余分な空白がある)は技術的には異なり、比較前の追加の正規化なしにはマージされません。

この機能が必要な理由

  • インポート前にメールアドレスやURLのリストから重複エントリを削除する。
  • バージョンやIDのリストをテキストではなく数値としてソートする。
  • 2つのリストを同じソート形式にすることで、2つのデータセットを素早く比較する。

自然順ソート(natural sort)

自然順ソートは、アルファベット順と数値順の中間的なアプローチです: 文字列内の連続した数字を数値として認識し、それ以外の部分はテキストとして比較します。これによりfile2.txtfile10.txtより前に来ます — 形式的にはこれらは独立した数値ではなく文字列ですが、テキストの接頭辞を持つファイル名やバージョン番号に便利です。

ツールを試す