9

整数Dayプロパティを持つクラスとIEnumerable<T>、日が 2、3、4、1、3、3、5 (この順序で) であるオブジェクトの があるとします。

の明示的なカスタム実装を必要とせずo.Day == 3に、元のリスト内の要素の相対位置から(たとえば) サブシーケンスの順序が維持されることを保証する方法はありますか?IEnumerable

4

2 に答える 2

18

OrderByそれがあなたが意味するものであれば、安定していると文書化されています。つまり、何もする必要はありません。

Enumerable.OrderBy

このメソッドは安定ソートを実行します。つまり、2 つの要素のキーが等しい場合、要素の順序は保持されます。対照的に、不安定な並べ替えは、同じキーを持つ要素の順序を保持しません。

于 2013-11-07T11:11:54.977 に答える
1

サブシーケンスの順序を保証する方法はありますか?

次のようなクラスがあるとします。

class A
{
    public string Name { get; set; }
    public int Day { get; set; }

    // other properties
}

そしてシーケンス:

{ "A", 2 },
{ "B", 3 },
{ "C", 4 },
{ "D", 1 },
{ "E", 3 },
{ "F", 3 },
{ "G", 5 },

あなたが意味する場合、これは:

sequence.Where(item => item.Day == 3)

アイテムが次のように注文されるシーケンスを生成します: B, E, F、答えは「いいえ、保証はありません」です。

シーケンスが の場合、順序はList<A>保持されます (実際、リストだけでなく、LINQ to Objects でも保持されます)。

をシーケンスする場合IQueryable<A>、順序は LINQ プロバイダーの実装、基になるデータ ソース、および に既に含まれている現在の式ツリーに依存する場合がありますIQueryable<A>。したがって、この場合はOrderBy/で順序付けを強制する必要がありますOrderByDescending

于 2013-11-07T11:22:41.547 に答える