web-dev-qa-db-ja.com

なぜいくつかのソート方法は1、10、2、3 ...でソートするのですか?

多くの数値の並べ替え方法が、予想される1、2、3、10ではなく、1、10、2、3 ...で並べ替えられているように見えることに気づきました...私がするシナリオを思い付くのに問題があります最初の方法が必要であり、ユーザーとして、私は実際にそれを見るたびにイライラします。最初のスタイルと2番目のスタイルの正当な使用例はありますか?もしそうなら、それらは何ですか?そうでない場合、どのようにして最初の種類のスタイルが生まれたのですか?各ソート方法の正式名称は何ですか?

32
VirtuosiMedia

つまり、lexicographicソートです。これは、基本的に言語が変数を文字列として扱い、文字ごとに比較することを意味します("200""19999"より大きいため、'2''1'より大きいため)

これを修正するには

  • 値が整数として扱われることを確認し、

  • 文字列の前に'0'を追加して、すべてが同じ長さになるようにします(最大値がわかっている場合にのみ有効です)。
    これが、メディアファイル(S1E01)のエピソード番号に先頭に0が付いているので、辞書式ソートが混乱を招くことなく、プログラムがアルファベット順に再生/表示できるようにする理由です。

  • または、最初に文字列の長さを比較するカスタムコンパレーターを作成し(短い文字列は小さい整数です)、それらが等しい場合は辞書順で比較します(先頭の'0'に注意)

64
ratchet freak

アルファベット順では、1が2の前に来ます。最初の方法が表示されるときはいつでも、それが望ましいからではなく、厳密にアルファベット順でソートされているためです(左から右へ、一度に1文字ずつ):1、2 、1はあなたには意味がありますが、アルファベット順の比較しか知らないコンピュータには意味がありません。そのような単純な比較では、1つのの後にが実際に後に来たことを知る方法はありません2。

数値を正しく処理するWordと数値の並べ替えが混在している場合は、並べ替えの方がよりインテリジェントであり、その上、通常は文字列の先頭または末尾でのみ機能します。

6
Nicole

他の人はこの種のことについて答えを持っていますが、なぜあなたがそれを見たのかについてのあなたの質問に誰もが本当に答えたわけではありません。答えはそれほどエキサイティングではありません。通常はバグです。ほとんどのソート方法はデフォルトでどちらか一方になり、プログラミングでは、数値をソートするときにデフォルトを変更することはおそらく不注意です。

4
frankc

これは、数値の文字列ではなくアルファベット順に数値の文字列を並べ替えた結果です。

たとえば、--numeric-sortコマンドラインオプションを使用して数値を解釈するように指示しない限り、その並べ替えスタイルはunix sortコマンドのデフォルトの動作です。

4
whatsisname