個人的によく使用する独自クラス配列の並び替え処理
だいたいこの3つを使用。
例:顧客クラス。List
/// <summary> /// 顧客クラス /// </summary> class Customer : IComparable { public int CompareTo(object x) { var otherCS = (Customer)x; return this.Age.CompareTo(otherCS.Age); } /// <summary> /// 苗字 /// </summary> public string LastName { get; set; } /// <summary> /// 名前 /// </summary> public string FirstName { get; set; } /// <summary> /// 年齢 /// </summary> public int Age { get; set; } }
メイン。「Comparison
static void Main(string[] args) { //顧客リストを作成 var customers = new List<Customer>(); customers.Add(new Customer() { LastName = "あおき", FirstName = "たろう", Age = 45 }); customers.Add(new Customer() { LastName = "いとう", FirstName = "あいこ", Age = 32 }); customers.Add(new Customer() { LastName = "きもと", FirstName = "ゆうじ", Age = 16 }); customers.Add(new Customer() { LastName = "やまだ", FirstName = "しろう", Age = 14 }); //IComparableインターフェイスの実装 customers.Sort(); Console.WriteLine("\n### 年齢順(IComparableインターフェイスの実装) ###"); foreach (Customer cs in customers) { Console.WriteLine("{0} {1} ({2}歳)", cs.LastName, cs.FirstName, cs.Age); } //Comparison<T> デリゲート customers.Sort((Customer x, Customer y) => { return x.LastName.CompareTo(y.LastName); }); Console.WriteLine("\n### 苗字順(omparison<T> デリゲート) ###"); foreach (Customer cs in customers) { Console.WriteLine("{0} {1} ({2}歳)", cs.LastName, cs.FirstName, cs.Age); } //LINQ var query = from cs in customers orderby cs.FirstName select cs; Console.WriteLine("\n### 名前順(LINQ) ###"); foreach (Customer cs in query.ToArray()) { Console.WriteLine("{0} {1} ({2}歳)", cs.LastName, cs.FirstName, cs.Age); } #if DEBUG Console.ReadLine(); #endif }
実行結果
### 年齢順(IComparableインターフェイスの実装) ### やまだ しろう (14歳) きもと ゆうじ (16歳) いとう あいこ (32歳) あおき たろう (45歳) ### 苗字順(omparison<T> デリゲート) ### あおき たろう (45歳) いとう あいこ (32歳) きもと ゆうじ (16歳) やまだ しろう (14歳) ### 名前順(LINQ) ### いとう あいこ (32歳) やまだ しろう (14歳) あおき たろう (45歳) きもと ゆうじ (16歳)