整数Day
プロパティを持つクラスとIEnumerable<T>
、日が 2、3、4、1、3、3、5 (この順序で) であるオブジェクトの があるとします。
の明示的なカスタム実装を必要とせずo.Day == 3
に、元のリスト内の要素の相対位置から(たとえば) サブシーケンスの順序が維持されることを保証する方法はありますか?IEnumerable
整数Day
プロパティを持つクラスとIEnumerable<T>
、日が 2、3、4、1、3、3、5 (この順序で) であるオブジェクトの があるとします。
の明示的なカスタム実装を必要とせずo.Day == 3
に、元のリスト内の要素の相対位置から(たとえば) サブシーケンスの順序が維持されることを保証する方法はありますか?IEnumerable
OrderBy
それがあなたが意味するものであれば、安定していると文書化されています。つまり、何もする必要はありません。
このメソッドは安定ソートを実行します。つまり、2 つの要素のキーが等しい場合、要素の順序は保持されます。対照的に、不安定な並べ替えは、同じキーを持つ要素の順序を保持しません。
サブシーケンスの順序を保証する方法はありますか?
次のようなクラスがあるとします。
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
。