コンピューティングにおいて、自然ソート順序(または自然ソート) は、埋め込まれた数字を文字のシーケンスではなく数値全体として扱う文字列の順序付け方法です。
標準的なアルファベット順では、文字ごとに文字列を比較します (「1」は「2」より小さいため、「10」は「2」の前に並びます)。一方、自然な並び替え順では、数値の大きさによって並び替えられ、「2」が「10」の前に並びます。
自然ソート順は、標準的な辞書式順序の欠点を解決するために設計されています。標準的な辞書式順序では、番号付きリスト、ファイル名、バージョン番号を扱う際に、人間にとって直感に反する結果が生じることがよくあります。[ 1 ]
| 自然 | 辞書式 |
|---|---|
| 1.jpg 2.jpg 3.jpg 9.jpg 10.jpg 11.jpg | 1.jpg 10.jpg 11.jpg 2.jpg 3.jpg 9.jpg |
標準的なソートの問題
標準的なアルファベット順(辞書式)ソートでは、文字列は左から右へ文字ごとに比較されます。そのため、数値は数値全体ではなく、最初の桁の値に基づいてソートされます。
例えば、標準的なソート方式を使用するコンピュータでは、文字列「11」は「2」の前に配置されます。これは、文字「1」(11の最初の数字)のコード値が「2」よりも低いためです。文字コードの観点からは数学的には正しいものの、この順序付けは、特にファイル管理やデータリストにおいて、ユーザーが期待する論理的な順序を崩してしまいます。
手術
自然ソートアルゴリズムは通常、文字列をテキストと数字の「チャンク」に分割することによって動作します。
- テキスト チャンクはアルファベット順に比較されます (多くの場合、大文字と小文字は区別されません)。
- 数値チャンクは整数値に解析され、数値的に比較されます。
アルゴリズムの比較
| 標準的なソート(辞書順) | 自然な選別 |
|---|---|
| ファイル1.txt ファイル10.txt ファイル11.txt ファイル12.txt ファイル2.txt ファイル20.txt ファイル3.txt | ファイル1.txt ファイル2.txt ファイル3.txt ファイル10.txt ファイル11.txt ファイル12.txt ファイル20.txt |
エッジケースの処理
自然ソートの異なる実装では、エッジケースの処理が異なる場合があります。
- 先頭のゼロ:一部のアルゴリズムでは、「01」と「1」を同一として扱いますが、他のアルゴリズムでは、決定論的なソートを保証するために、「01」が「1」の後に続く(またはその逆)という順序付けを強制する場合があります。
- 空白:ほとんどの実装では、並べ替えの異常を防ぐために、数字の前後の空白を無視します。
- 小数とバージョン番号:自然ソートの一種で、しばしばバージョンソートとも呼ばれるソートは、ドットで区切られた複数の数値セグメント(例:1.2.10と1.2.2)を処理するように設計されています。標準ソートでは、1.2.10 は1.2.2 の前に配置されますが、バージョンソートでは、セグメントは個別に解析され、1.2.10は1.2.2 の後に配置されます。
歴史と実装
自然な並べ替え順序で並べ替える機能は、現在、多くのプログラミング言語やオペレーティング システムのソフトウェア ライブラリで広く利用できます。
このコンセプトはMacintoshコミュニティで大きな注目を集めました。1996年のMacHackカンファレンスでは、ベストハックコンテストへのエントリーとして、Natural Order Mac OS System Extensionが一夜にして考案され、実装されました。 [ 2 ] [ 3 ]その後、Dave Koelleは1997年に「Alphanum Algorithm」を公開しました。[ 4 ]これは人気のリファレンス実装となり、後の多くのライブラリに影響を与えました。Martin Poolは2000年に「Natural Order String Comparison」を公開しました。[ 5 ]
最新の実装には以下が含まれます。
- PHP: natsort ()関数は標準ライブラリに組み込まれています。[ 6 ]
- Python: natsortライブラリは広く使われているサードパーティ製パッケージです。[ 7 ]
- Perl: Sort::NaturallyモジュールはCPANから入手可能です。[ 8 ]
- Unix/Linux: GNU lsおよびsortコマンドは、-v(バージョンソート)フラグ(lsの場合)または-Vフラグ(sortの場合)を介して自然なソートをサポートしています。[ 9 ]
- .NET/C#: NaturalSort.Extensionなど、様々な拡張機能が存在する。[ 10 ]
Windows エクスプローラー (Windows XP 以降) やMidnight Commanderなどのファイル マネージャーは、デフォルトで自然な並べ替えを使用してファイル リストを表示します。
参照
参考文献
- ^ 「人間のためのソート:自然なソート順序」 blog.codinghorror.com 2007年12月12日。
- ^ 「自然順序数値ソート」。
- ^ 「TidBITS: 物事の自然な秩序」 1997年2月3日。
- ^ 「Dave Koelle の Alphanum アルゴリズム」。
- ^ 「Martin Poolの自然順序文字列比較」。
- ^ 「PHP: natsort - マニュアル」 . php.net .
- ^ Morton, Seth M. (2021年12月23日). 「natsort: Pythonでのシンプルかつ柔軟な自然ソート」 – PyPI経由。
- ^ "Sort::Naturally - metacpan.org" . metacpan.org .
- ^ 「バージョンソートの概要(GNU Coreutils 9.8)」www.gnu.org . 2025年10月26日閲覧。
- ^ Pažourek, Tomáš (2022年4月1日). 「NaturalSort.Extension: .NET/C#での自然なソートのサポート」 . github.com .