簡體   English   中英

在OrderBy中維護子序列順序

[英]Maintain subsequence order in OrderBy

假設我有一個具有整數Day屬性的類和一個IEnumerable<T>對象,其中的天數分別為IEnumerable<T>和5(按此順序)。

有沒有辦法保證子序列的順序(例如) o.Day == 3是從其元素在原始列表中的相對位置維護而不需要IEnumerable的顯式自定義實現?

如果這是你的意思, OrderBy被記錄為穩定的 ; 所以:你不需要做任何事情。

Enumerable.OrderBy

該方法執行穩定的排序; 也就是說,如果兩個元素的鍵相等,則保留元素的順序。 相反,不穩定的排序不會保留具有相同鍵的元素的順序。

有沒有辦法保證子序列的順序在哪里

假設你有這樣的課程:

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> ,那么排序可能取決於已經包含在IQueryable<A>的LINQ提供程序實現,基礎數據源和當前表達式樹。 因此,在這種情況下,您應該強制使用OrderBy / OrderByDescending排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM