私はユーザ定義のクラスオブジェクトのコレクションを持っています。車のインスタンス、それをソートする最良の方法は何ですか。.netでユーザ定義のクラスをソートする方法C#
以下は可能な方法ですが、どちらが最適ですか、他の方法はありますか?
- IComparableを
- はComparer
- 比較
- IEquatable
任意のアイデアは非常に
私はユーザ定義のクラスオブジェクトのコレクションを持っています。車のインスタンス、それをソートする最良の方法は何ですか。.netでユーザ定義のクラスをソートする方法C#
以下は可能な方法ですが、どちらが最適ですか、他の方法はありますか?
任意のアイデアは非常に
あなたは絶対にを必要としない限り、他の重要な、非常に簡単な方法は、ありますがいただければ幸いですインプレースで並べ替える: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>
のようなもののためにではなく、順序付けのために使用されています。
ご理解いただきありがとうございます。 – Pingpong
@ジョン、これは話題です。私はあなたの本の両方のバージョンを深く読んでいます。あなたの本とは別に、C#の専門家のために、どのようなC#の本をお勧めしますか? Googleのソフトウェアエンジニアに応募するには? – Pingpong
@ピンポン:実際の* C#*言語帳?仕様は、理想的には...もしあなたがC#の深さを理解していれば、それ以上の*言語*の詳細に行くことがわかっている本はありません。 C#とC#4を使ったCLRの簡単な紹介は、他の*面でも詳しく説明しています。 Googleに申請する場合は、あなたのCVをpingするには[email protected]。 –