2011-07-05 10 views
2

私はユーザ定義のクラスオブジェクトのコレクションを持っています。車のインスタンス、それをソートする最良の方法は何ですか。.netでユーザ定義のクラスをソートする方法C#

以下は可能な方法ですが、どちらが最適ですか、他の方法はありますか?

  1. IComparableを
  2. はComparer
  3. 比較
  4. IEquatable

任意のアイデアは非常に

答えて

11

あなたは絶対にを必要としない限り、他の重要な、非常に簡単な方法は、ありますがいただければ幸いですインプレースで並べ替える:LINQ to Objectsを使用します。たとえば:

var complex = cars.OrderByDescending(car => car.Year) 
        .ThenBy(car => car.Model) 
        .ThenByDescending(car => car.Make) 
        .ToList(); 

私は最後にList<Car>を作成するために、最後にToListを入れている:

var orderedByName = cars.OrderBy(car => car.Name).ToList(); 

あなたはこのように、複数の投影によって、多様な方法で注文することができます - あなただけしかし結果を反復処理する必要がある場合、あなたはそれを遅延順序を実行させることができます。

var query = cars.OrderByDescending(car => car.Year) 
        .ThenBy(car => car.Model) 
        .ThenByDescending(car => car.Make); 

foreach (var car in cars) 
{ 
    // Use car 
} 

個人的に私はこれをソートの最も柔軟な方法を見つけます。そうでない場合は、IComparer<T>Comparison<T>を使用すると、次に柔軟性が高くなります。誰でもがそのように注文できます。 IComparable<T>は、アイテムの順序付け方法をクラス自身が決定する必要があり、一度しか実装できないため、柔軟性に欠けます。

IEquatable<T>平等の項目を比較するために使用されているので、HashSet<T>のようなもののためにではなく、順序付けのために使用されています。

+0

ご理解いただきありがとうございます。 – Pingpong

+0

@ジョン、これは話題です。私はあなたの本の両方のバージョンを深く読んでいます。あなたの本とは別に、C#の専門家のために、どのようなC#の本をお勧めしますか? Googleのソフトウェアエンジニアに応募するには? – Pingpong

+0

@ピンポン:実際の* C#*言語帳?仕様は、理想的には...もしあなたがC#の深さを理解していれば、それ以上の*言語*の詳細に行くことがわかっている本はありません。 C#とC#4を使ったCLRの簡単な紹介は、他の*面でも詳しく説明しています。 Googleに申請する場合は、あなたのCVをpingするには[email protected]。 –

関連する問題