13

C#のオブジェクトのリストがあります。すべてのオブジェクトには、(他のプロパティの中でも)プロパティcode1およびcode2が含まれています。オブジェクトのリストは特定の順序ではありません。オブジェクトのリストをcode1プロパティとcode2プロパティで並べ替える必要があります。

例:

List -> object = id, name, code1, code2, hours, amount.

例コード1=004
例コード2=001、002、003、004、016
例コード1=005
例コード2=001、002、003、004

したがって、並べ替え後、次の順序でオブジェクトが必要になります

004 001
004 002
004 003
004 005
004 016
005 001
005 002
005 003
005 004
4

2 に答える 2

23

linq拡張機能を使用できます(元のリストは並べ替えられません)。

var sorted = theList.OrderBy(o => o.code1).ThenBy(o => o.code2);

元のリストを並べ替えられたリストに置き換えるには、少し修正します(あまり効率的ではなく、新しいリストが作成されます)。

theList = theList.OrderBy(o => o.code1).ThenBy(o => o.code2).ToList();

これは、リストが次のような正しいタイプであることを前提としています。

List<MyClass> theList = new List<MyClass>();

また、オブジェクトのリストではありません。その場合は、.Cast<>()またはを使用する必要があります.OfType<>()

于 2012-04-04T14:29:10.317 に答える
11

呼び出しに対するAdamHouldsworthの応答は、.ToList()不必要に新しいリストを作成することに注意してください。リストが大きい場合、これは許容できないメモリプレッシャーを引き起こす可能性があります。カスタム比較関数を提供することにより、リストを適切にソートする方がよいでしょう。

theList.Sort((a, b) =>
    {
        var firstCompare = a.code1.CompareTo(b.code1);
        return firstCompare != 0 ? firstCompare : a.code2.CompareTo(b.code2);
    });

または、この順序がタイプの固有のプロパティである場合は、タイプに実装IComparable<T>して、

theList.Sort();

...IComparable<T>.CompareTo()実装を使用します。

于 2012-04-04T15:06:48.843 に答える