自然な並び順

コンピューティングにおいて、自然ソート順序(または自然ソート) は、埋め込まれた数字を文字のシーケンスではなく数値全体として扱う文字列の順序付け方法です。

標準的なアルファベット順では、文字ごとに文字列を比較します (「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.101.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などのファイル マネージャーは、デフォルトで自然な並べ替えを使用してファイル リストを表示します。

参照

参考文献