web-dev-qa-db-ja.com

C#ヘルプ:C#でのオブジェクトのリストの並べ替え

重複の可能性:
ソートされた値の事前定義されたリストを使用してオブジェクトをソート
C#ヘルプ: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台(または任意の整数)の車を含みます。バブルソートをするつもりでしたが、うまくいきますか?ヘルプはありますか?

ありがとう

12
Mike Gallager
CarList = CarList.OrderBy( x => x.CreationDate ).ToList();
42
Joel Coehoorn

まず、.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();
5
Tomas Aschan

独自のソートアルゴリズムを作成しないでください。 .NETには、特にこのようなもののための Array.Sort() メソッドがあります。

カスタムオブジェクトがあるため、2つのオブジェクトを比較する方法を定義して、並べ替えアルゴリズムがそれらを並べ替える方法を認識できるようにする必要があります。これは、次の2つの方法のいずれかで実行できます。

  1. CarSpecsクラスに IComparable インターフェースを実装させます
  2. IComparer を実装するクラスを作成し、それをパラメーターとして配列とともにArray.Sort()に渡します。
4
Dan Herbert

BCLには既存のソートアルゴリズム(Array.Sort()およびList.Sort())があります。 CreationDateを使用して並べ替え順序を決定するIComparerクラスを実装し、すべてのオブジェクトを配列またはリストに入れて、適切なSort()メソッドを呼び出します。

0
thecoop