Pages

2017/01/24

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 は、文字列の整形のために使用するに留めておいた方が良いですね。
Related Posts Plugin for WordPress, Blogger...