重複の可能性:
ソートされた値の事前定義されたリストを使用してオブジェクトをソート
C#ヘルプ:C#でのオブジェクトのリストの並べ替えダブルポスト
public class CarSpecs
{
public CarSpecs()
{
}
private String _CarName;
public String CarName
{
get { return _CarName; }
set { _CarName = value; }
}
private String _CarMaker;
public String CarMaker
{
get { return _CarMaker;}
set { _CarMaker = value; }
}
private DateTime _CreationDate;
public DateTime CreationDate
{
get { return _CreationDate; }
set { _CreationDate = value; }
}
}
これはリストであり、私はこのリストをソートする効率的な方法を見つけようとしていますList<CarSpecs> CarList
、車の製造日までに6台(または任意の整数)の車を含みます。バブルソートをするつもりでしたが、うまくいきますか?ヘルプはありますか?
ありがとう
CarList = CarList.OrderBy( x => x.CreationDate ).ToList();
まず、.Net 3.5で導入された簡略構文を使用して、このクラス定義を大幅に短くすることができます。
public class CarSpecs
{
public CarSpecs() { }
public String CarName { get; set;
public String CarMaker { get; set; }
public DateTime CreationDate { get; set; }
}
これは、上記のクラスとまったく同じクラスにコンパイルされます。
次に、Lambda式またはLINQを使用して簡単に並べ替えることができます。
var linq = (from CarSpecs c in CarList
orderby c.CreationDate ascending
select c) as List<CarList>;
var lambda = CarList.OrderBy(c => c.CreationDate).ToList();
独自のソートアルゴリズムを作成しないでください。 .NETには、特にこのようなもののための Array.Sort()
メソッドがあります。
カスタムオブジェクトがあるため、2つのオブジェクトを比較する方法を定義して、並べ替えアルゴリズムがそれらを並べ替える方法を認識できるようにする必要があります。これは、次の2つの方法のいずれかで実行できます。
CarSpecs
クラスに IComparable
インターフェースを実装させますIComparer
を実装するクラスを作成し、それをパラメーターとして配列とともにArray.Sort()
に渡します。BCLには既存のソートアルゴリズム(Array.Sort()およびList.Sort())があります。 CreationDateを使用して並べ替え順序を決定するIComparerクラスを実装し、すべてのオブジェクトを配列またはリストに入れて、適切なSort()メソッドを呼び出します。