我有這樣定義的列表...按屬性/匿名函數排序列表?
var sets = new List<HashSet<int>>(numSets);
爲什麼沒有超載,所以我可以這樣排序呢?我想要最大的一組。最簡單的方法是什麼?
我有這樣定義的列表...按屬性/匿名函數排序列表?
var sets = new List<HashSet<int>>(numSets);
爲什麼沒有超載,所以我可以這樣排序呢?我想要最大的一組。最簡單的方法是什麼?
因爲List<T>
類是在.NET 2.0中引入的,所以這個類的設計者決定如此。你可以使用OrderByDescending
擴展方法:
sets = sets.OrderByDescending(s => s.Count).ToList();
試試這個:
sets.Sort((setA, setB) => setB.Count.CompareTo(setA.Count));
它使用Sort(Comparison<T> comparison)
超載的List<T>.Sort
。 表達式將B與A比較而不是A與B進行比較的事實是生成您需要的按遞減順序排列的順序。
您的代碼無法正常工作的原因是因爲List<T>.Sort
與Enumerable.OrderByDescending
不同,沒有接受Func<TSource, TKey>
密鑰選擇器的超載。
@Darin Dimitrov的使用OrderByDescending
的技術也很好,但請注意,這將創建一個排序列表,並將原始列表中的引用重新分配給新排序的列表。
這將按升序排序。 OP希望最大的一組。你需要'OrderByDescending'。 – Ani 2010-10-09 08:35:08
@Ani,正確。我更新了我的帖子以反映這一點。感謝您指出。 – 2010-10-09 08:37:11
這兩種解決方案看起來都不錯......我會等着看看誰會在我選擇之前獲得更多選票:P謝謝!我喜歡這個人閱讀的容易程度。 – mpen 2010-10-09 09:01:41