文字列のソート
文字列で昇順ソートしている部分の並べ替えが間違っている、と指摘されてどういうことなのかよく聞いたら漢字部分が"(訓)読み"通りになっていないということらしく「そこは文字コードでソート」と説明したんですが、最近の若い子は並べ替えの時に文字コード順にしないんですかね
と、わけのわからない事を書いてみましたが、プログラミングの勉強でソートは出てくるはずでそこで文字列を相手にやったりもすると思うんですよね
そんなときに
var list = new[] { "青森", "山形", "秋田" }; foreach (var s in list.OrderBy(s => s)) { Console.WriteLine(s); }
この結果が
山形 秋田 青森
こうなってわけがわからなくなったりしないんでしょうか。ちなみに↑はどういう順番で並べ替えるのが正解なんでしょ
文字コード順は見ただけではわからない
ということで当て字なんかまで考慮して日本人になじみのある並べ替えなんてやっていられないので、並べ替えは基本的にシステム(フレームワーク)依存にします。多分文字コード順になるでしょう。そういう仕様にした場合、文字コード順に並べ替えられているか、をチェックする人がいるわけですがこのチェックがなかなか厄介っぽいです
このまえ C# の人のブログ 任意色絵文字? | ++C++; // 未確認飛行 C ブログ を見たのでこのあたりで以下のような cshtml を書いてみます (スクショですんません)
9~13行目で文字列リストを作って、20行目のループでそのまま出力。27行目のループで並べ替えて出力しています。出力はその文字列とデフォルトエンコーディングでエンコード(?)したbyte配列です
上記 C# の人のブログにも書いてありますが Windows10では正しく表示されないので、Windows11のEdgeで見た結果がこちら
この結果はそれなりの経験者でも頭をひねるのではないでしょうか
ソート後の黒猫の位置がおかしいですね。 でもその横のデータを見るとおかしくないですね
ということで文字列部分でソートする時は気を付けましょう、というお話だったような気がします
おしまい