2012-01-04 8 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

+0

良い点。これが巨大なリストだった場合、複雑さは避けられます。要因を演じる。 –

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

関連する問題