簡體   English   中英

C#中的列表排序

[英]list sorting in c#

我有對象列表,我需要根據對象的property1對列表進行排序,並且我需要再次對具有對象的property2的結果列表進行排序,而不會丟失在第一次排序中完成的分組..例如:obj具有2個屬性名稱和位置i需要具有已按區域排序的對象的最終列表,而相同區域的對象應按名稱排序...

(假設您沒有可用的LINQ,這很簡單。)

如果您查看MiscUtil ,則會發現兩個有用的類: ProjectionComparerLinkedComparer (IIRC)。

ProjectionComparer基本上實現了LINQ“按順序排序”的概念-您指定如何將源元素轉換為鍵值,比較器將按這些鍵值進行排序。

LinkedComparer兩個比較器,並返回一個新的比較器,該比較器首先使用“主要”比較器,如果值與主要比較器相等,則使用“第二”比較器。

創建兩個投影比較器(每個屬性一個),然后創建一個具有兩個投影比較器的鏈接比較器,然后將其傳遞給List<T>.Sort 讓我知道您是否需要完整的代碼示例,但是就像(使用C#3)那樣:

var comparer = new LinkedComparer<Foo>
     (ProjectionComparer<Foo>.Create(x => x.FirstProperty),
      ProjectionComparer<Foo>.Create(x => x.SecondProperty));

(在C#2中,您可以使用匿名方法,它們只會有點冗長。)

聽起來您想使用LINQ的orderbythenby語法。

列表具有Sort方法,該方法將Comparision委托作為參數。 還有一些重載,您可以在其中傳遞自己的比較器。

因此,您可以編寫一個實現IComparer的類。 然后,在該類的實現中,編寫代碼,比較所需屬性上的2個對象。

暫無
暫無

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

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