C#のラムダのソートで全半角や大文字小文字を無視する

C#のラムダのソートで全半角や大文字小文字を無視する
C#のラムダ式での並び替えをする場合、単純な並び替えをして ToList() するのであれば OrderBy や OrderByDescending 等で事足ります。ただ、日本語環境にありがちな大文字や小文字、全角や半角を無視しての並び替えなど、細かい条件をつけた並び替えは、String.Compare メソッドを使用する必要があります。

大文字や小文字、全角や半角も無視して並び替える例

var lst = new List() 
{ 
    new Product {Name = "CCC",Amount = 1000, }, 
    new Product {Name = "aaaa",Amount = 2000, }, 
    new Product {Name = "ZZZ",Amount = 3000, }, 
    new Product {Name = "BBBB",Amount = 5000, }, 
}; 
 
// 昇順(日本語のロケーションではこれだけでいけます) 
lst.Sort((x, y) => string.Compare(x.Name, y.Name)); 
// 降順 
lst.Sort((x, y) => string.Compare(y.Name, x.Name)); 
 
// 明示的にオプションを付ける場合 
lst.Sort((x, y) => string.Compare(x.Name, y.Name, true)); 
// カルチャ情報を「日本」に指定 
lst.Sort((x, y) => string.Compare(x.Name, y.Name, true, new CultureInfo("ja-JP"))); 
大文字と小文字に関しては、ToUpper() や ToLower() などを使って揃えてから行う書き方をする人もいますが、これらは Compare メソッドと比較すると 2 倍の速度差があるようです。

大文字/小文字を区別しないで文字列を比較するには?[C#、VB]
http://www.atmarkit.co.jp/fdotnet/dotnettips/624ignorecase/ignorecase.html

ToUpper や ToLower は、文字列の整形のために使用するに留めておいた方が良いですね。

このブログの人気の投稿

Excel で入力した文字に勝手に取り消し線が入る

コピーした行の挿入が表示されない時はフィルタされていないかチェック