MW211 EXIT

devlog
設計/数値っぽいけど文字列の場合のソート
2012年01月10日
「2」と「10」の場合、数値としてソート(昇順で)すると「2→10」の順になるが、
文字列としてソートすると「10→2」の順になる。
文字列だと先頭の一文字目で「1」と「2」を比較して「1」が先に来るからだ。
「い」と「ああ」をソートすると「ああ→い」の順になるのと同じだ。

特に「文字列+数値=文字列」の場合に顕著になる。
「番号2」「番号10」とかの場合。(「番号10」が先になってしまう)

回避方法とは?

ま、ゼロパディングでしょうなぁ。
「番号02」「番号10」にすりゃ問題なし。

「02」ってのが嫌なら「番号②」「番号⑩」って方法もある
でも「⑳」までしかないけどね。(それに特殊文字はちょっと)

ま、後は、表示用項目とソート用項目とを分けて
ソート用項目は「番号02」、表示用項目は「番号2」とか二重管理してしまうのも手だ。
どうせだったら、ソート用項目を順番の連番にしてしまうってものもあり。
これをIDと言ったり言わなかったり。

ゼロパディングたって何桁パディングすりゃいいんだかってのも結構重要。
さっきの例だと「100」を超えて3桁に突入したら破綻する。
まるで二千年問題だね。
でも大抵は、数値項目でもあらかじめ桁数を決めたりするものなので、
そんなに悩まなかったりするかも。
分類:設計