自然順
辞書順と数字の大きさ順を組み合わせた,人間に優しい並び換え順序
自然順(自然な並び換え順序、英: Natural sort order)とは、文字列の照合規則の一つであり, 辞書式順序を基本としつつも複数桁の数字をまとめて1つの数値として扱う。 一般に計算機による文字列の並び換えは辞書式順序が主であるが,自然順による並びは人間にとってより直感的であり,とくに末端利用者向けのUIとして推奨されている[1]。
例
編集例として、文字列“foo11”と“foo2”の照合について考える。
- 辞書順
- 先頭から比較する。“foo”は共通。次に“1”と“2”を比較する。“1”は“2”よりも辞書的に前にあるので,“foo11”は“foo2”より小さいと看做される。
- foo11
- foo2
- 自然順
- “foo”の照合までは辞書順と同じである。次に比較されるのは数値としての“11”および“2”である。“11”は“2”よりも数値的に後にあるので,“foo11”は“foo2”より大きいと看做される。
- foo2
- foo11
自然順の並び換えを提供する主な言語・ライブラリ
編集プログラミング言語には,自然順による並び換え機能が組み込まれているものもある。 また,組み込みで存在していなくとも,多くの場合は自然順による並び換え機能を提供するライブラリが存在する。
以下に,いくつかプログラミング言語において文字列を自然順に並び換えている例を挙げる。 なお,標準(または規格)として自然順照合が提供されているものにかんしては,言語・ライブラリ名の先頭に赤星(*)を附加した。
- *Win32 API
- Windows XPおよびWindows Server 2003以降のWin32 APIでは
StrCmpLogicalW()
関数が利用できる[2]。 Add-Type -Name 'NaturalStringComparerNative' -MemberDefinition @' [DllImport("shlwapi.dll", CharSet = CharSet.Unicode)] public static extern int StrCmpLogicalW(string psz1, string psz2); '@ $narr = [Collections.Generic.List[string]]` ('z100a', 'z120', 'z121', 'z02a', 'z3', 'z4', 'z100', 'z02000', 'z01', 'z02', 'z05') $narr. Sort({ [Microsoft.PowerShell.Commands.AddType.AutoGeneratedTypes.NaturalStringComparerNative]:: StrCmpLogicalW($args[0], $args[1]) }) "$narr"
- Perl(モジュール)
- Perl 5ではSort::Naturallyモジュールが提供する
nsort()
関数を用いて配列の各要素を自然順に照合できる[3]。 use Sort::Naturally; @narr = qw(test01.txt test1.txt test10.txt test3.txt); @narr = nsort(@narr); print join(' ', @narr);
脚注
編集出典
編集参考文献
編集- Jeff Atwood (2007年12月12日). “Sorting for Humans : Natural Sort Order” (英語). 2019年9月13日閲覧。
- 実装
- “StrCmpLogicalW function (shlwapi.h)”. Microsoft Docs. Microsoft (2018年12月5日). 2019年9月13日閲覧。
- Sean M. Burke (2001年). “Sort::Naturally - sort lexically, but sort numeral parts numerically” (英語). MetaCPAN. 2019年7月13日閲覧。
- “PHP: natsort - Manual”. The PHP Group. 2019年7月13日閲覧。
- Seth Morton (2019年2月4日). “natsort - PyPI” (英語). Python Software Foundation. 2019年7月13日閲覧。
関連項目
編集外部リンク
編集- Online Alphabetizer Tool - オンラインで種々の照合規則を実行できるWebサービス。「Sort Natural」ボタンが自然順、「Sort Alphabetically」ボタンが(自然順が数字以外の照合の際に基本とする)アルファベット順の並び換え。