web-dev-qa-db-ja.com

数値と英数字が混在している場合の並べ替えの仕組み

グリッド、レポート、ドロップダウンボックスなどでユーザーにデータを表示しているとしましょう。問題のデータにはInvoice Numberというフィールドが含まれています。このフィールドには、時間の2/3の数値のみが含まれますが、残りの1/3の時間は英数字の混合です。

このため、どのソートアルゴリズムでも、アルファを数値ではなく数値でソートします。このため、1000は99よりはるかに前に来ます。値全体ではなく、最初の桁がソートされるためです。 000333などの他のアイテムは「333」として扱われず、222の前に表示されます。

ここに基準はありますか?すべての値を数値に変換し、それらを別の方法でソートする必要がありますか?それらはどのように統合されますか?または、英数字の並べ替えは正しい方法ですか?

11
Paul

Windows 7以降、Microsoftはファイル名でディレクトリを並べ替えるデフォルトの方法を「数値」並べ替えを使用するように変更しました。 (一部の情報 ここ

その動作の仕様は見つかりませんでしたが、リバースエンジニアリングを行うことができました。このアルゴリズムは、2つの英数字文字列を比較し、どちらが最初に来るかを決定する必要があります。

  • 各ファイル名をアルファベットと数字の部分に分割します。つまり、名前text123moretext456がリスト{"text""123""moretext""456"}

  • 2つの分割名の各部分について、次の比較を実行します。

    • 両方の部分が厳密に数値である場合は、それらを数値として比較します
      • 数値が同じ場合は、文字列として比較します
      • 文字列が同じ場合は、次の部分に進みます
    • 両方の部分が厳密に文字である場合、それらを文字列として比較します
      • 同じ場合は、次のパートに進みます
  • 部品が足りない場合は、部品が最も少ない名前が最初になります

次のような順序になります。

2
12
200000
1000000
a
a12
b2
text2
text2a
text2a2
text2a12
text2b
text12
text12a
11
Harrison Paine