多くの数値ソート方法が、予想される1、2、3、10ではなく、1、10、2、3 ...でソートされるように見えることに気づきました。最初の方法が必要であり、ユーザーとして、実際にそれを見るたびにイライラします。最初のスタイルと2番目のスタイルの合法的な使用例はありますか?もしそうなら、彼らは何ですか?そうでない場合、最初のソートスタイルはどのようにして生まれましたか?各ソート方法の正式名称は何ですか?
多くの数値ソート方法が、予想される1、2、3、10ではなく、1、10、2、3 ...でソートされるように見えることに気づきました。最初の方法が必要であり、ユーザーとして、実際にそれを見るたびにイライラします。最初のスタイルと2番目のスタイルの合法的な使用例はありますか?もしそうなら、彼らは何ですか?そうでない場合、最初のソートスタイルはどのようにして生まれましたか?各ソート方法の正式名称は何ですか?
回答:
これは辞書式ソートであり、基本的に言語は変数を文字列として扱い、文字ごとに比較します("200"
より大きい"19999"
ため'2'
、より大きい'1'
)
これを修正するには
値が整数として扱われるようにします。
'0'
すべてが同じ長さになるように文字列の先頭に追加します(最大値がわかっている場合にのみ実行可能)。
これが、0が先頭に追加されたメディアファイル(S1E01)にエピソード番号が表示される理由です。これにより、辞書式ソートが混乱することなく、プログラムをアルファベット順で単純に再生/表示できます。
または、最初に文字列の長さを比較するカスタムコンパレータを作成し(短い文字列は小さい整数)、それらが等しい場合は辞書的に比較します(先頭に注意してください'0'
)
これは、数値の文字列を数値ではなくアルファベット順に並べ替えた場合の結果です。
sort
たとえば、--numeric-sort
数値の解釈を試みるように指示するコマンドラインオプションを使用しない限り、このソートスタイルはunix コマンドのデフォルトの動作です。
他の人はこの種の答えを持っていますが、誰もあなたがそれを見る理由についてあなたの質問に本当に答えていません。答えは本当にエキサイティングではありません。通常はバグです。ほとんどの並べ替え方法はどちらか一方にデフォルト設定され、プログラミングはおそらく数字を並べ替えるときにデフォルトを変更することに不注意になります。