20
        List<string> prod = new List<string>();
        prod.Add("dfg");
        prod.Add("dfg");
        prod.Add("ojj");
        prod.Add("dfg");
        prod.Add("e");

上記のコードでは、prod Listにアイテム「dfg」が3回繰り返されています(最大カウント)...このアイテムは最大回数繰り返されるため、出力として「dfg」が必要です。誰もがこれを助けることができます

4

2 に答える 2

29

絶対に最も効率的ではありませんが、機能します:

var maxRepeatedItem = prod.GroupBy(x => x)
                          .OrderByDescending(x => x.Count())
                          .First().Key;

これはより効率的です:

var maxRepeatedItem = prod.GroupBy(x => x)
                          .MaxBy(x => x.Count())
                          .First().Key;

ただし、 MoreLinqの拡張機能が必要ですMaxBy

編集(コメントによる):

同点の場合にすべての最大反復要素が必要な場合は、次の解決策が考えられます。

var grouped = prod.ToLookup(x => x);
var maxRepetitions = grouped.Max(x => x.Count());
var maxRepeatedItems = grouped.Where(x => x.Count() == maxRepetitions)
                              .Select(x => x.Key).ToList(); 
于 2013-03-03T10:22:59.257 に答える
22

LINQ を使用できます。

string maxRepeated = prod.GroupBy(s => s)
                         .OrderByDescending(s => s.Count())
                         .First().Key;
于 2013-03-03T10:22:46.640 に答える