人気ブログランキング | 話題のタグを見る
(.Net)List<T>.Sortの使い方
List<T>に Sort という便利そうなメソッドがあります。

で、例えば User クラスというオリジナルクラスの List を、Userクラス内のプロパティ値に基づいてソートしたいって時もあります。
これは、List<T>.Sort メソッドでデリゲートを作成してやればいいようです。

例えば、List.Sort(delegate( x, y){});という場合、デリゲートのメソッドの戻り値が正なら x は y よりも後に、負なら y は x より手前にきます。

下記のように文字列で数値も含む場合長さも考慮した場合の例だと下記のようなコードになります。(C#)


List<User> UserList = new List<User>();
//UserList.Addを使って、Userオブジェクトをリストに追加。。。
UserList.Add(new User("900"));
UserList.Add(new User("1000"));
UserList.Add(new User("2000"));
UserList.Add(new User("abc"));
UserList.Add(new User("zz"));
UserList.Sort(delegate(User x, User y)
{
if (x.dmSamAccountName == null && y.dmSamAccountName != null) return -1;
if (x.dmSamAccountName != null && y.dmSamAccountName == null) return 1;
 
int ix,iy;
//数値の場合は桁数が長い方を大きいとみなす。
if (int.TryParse(x.dmSamAccountName, out ix) && int.TryParse(y.dmSamAccountName, out iy) )
{
return ix - iy;
}
return String.Compare(x.dmSamAccountName, y.dmSamAccountName);
});
 
//カスタムクラス(.Net3.5以降仕様)
public class User
{
public ActiveDirectory(string usrid){
ID = usrid;
}
public string ID{get;set;}
}


ソート後の並び順は下記のようになります。

900
1000
2000
abc
zz



自分で並び替えを実装しないといけないのが不便ですが、自由に並び替えのルールが決めれるのはいいですね。
by jehoshaphat | 2010-04-17 00:32 | .Net開発


<< (.Net)DataGridV... (.Net,ADSI)Acti... >>