2012-01-04 14 views
1

我知道在C#中,從列表中獲取一個項目可以使用FirstOrDefault()或其他函數。我正在尋找一個功能可以從列表中獲取大多數呈現的項目。如何在c#列表中獲取大多數呈現的項目?

例如:

{ "a" , "a" , "a" , "b" }.MostPresents() => "a" 

有沒有在C#中的默認功能(asp.net 4.0)這個?

回答

1
var MostCommonItem = list.GroupBy(item => item) 
         .OrderByDescending(g => g.Count()) 
         .Select(g => g.Key).First(); 
+3

當你可以在'O(n)'中完成時,排序使得這個'O(n log n)'。 – jason 2012-01-04 21:19:07

+0

好點。如果這是一個巨大的名單,複雜性將確定。發揮一個因素。 – 2012-01-04 21:20:51

5

c#(asp.net 4.0)中是否有默認函數?

不,但是你可以打包一些LINQ並快速獲得它。

var mostFrequent = sequence.GroupBy(x => x) 
          .Select(g => new { g.Key, Count = g.Count() }) 
          .MaxBy(x => x.Count) 
          .Key; 

在這裏,我使用MaxBy

+0

的確很不錯! :-) – Richard 2012-01-04 21:33:41

相關問題