2009-04-03 6 views
2
List<int> a = 11,2,3,11,3,22,9,2 

//output 
11 

Antwort

4

Dies ist möglicherweise nicht der effizienteste Weg, aber es wird die Arbeit erledigt.

public static int MostFrequent(IEnumerable<int> enumerable) 
{ 
    var query = from it in enumerable 
       group it by it into g 
       select new {Key = g.Key, Count = g.Count()} ; 
    return query.OrderByDescending(x => x.Count).First().Key; 
} 

Und der Spaß einzige Zeile Version ...

public static int MostFrequent(IEnumerable<int> enumerable) 
{ 
    return (from it in enumerable 
       group it by it into g 
       select new {Key = g.Key, Count = g.Count()}).OrderByDescending(x => x.Count).First().Key; 

} 
+0

Nice! Fast identische ...: D –

+0

@danbruc, ja. Normalerweise bevorzuge ich die erweiterte LINQ-Syntax (Ihre Antwort), aber GroupBy stört mich aus irgendeinem Grund, obwohl es viel einfacher in der erweiterten Syntax (IMHO) ist. – JaredPar

2
a.GroupBy(item => item). 
    Select(group => new { Key = group.Key, Count = group.Count() }). 
    OrderByDescending(pair => pair.Count). 
    First(). 
    Key; 
0

Ein weiteres Beispiel:

IEnumerable<int> numbers = new[] { 11, 2, 3, 11, 3, 22, 9, 2 }; 
int most = numbers 
    .Select(x => new { Number = x, Count = numbers.Count(y => y == x) }) 
    .OrderByDescending(z => z.Count) 
    .First().Number; 
Verwandte Themen