2013-03-03 17 views
13
 List<string> prod = new List<string>(); 
     prod.Add("dfg"); 
     prod.Add("dfg"); 
     prod.Add("ojj"); 
     prod.Add("dfg"); 
     prod.Add("e"); 

w powyższym wykazie kod prod ma pozycję „DFG” powtarza się trzykrotnie (liczba maksymalna) ... chcę „DFG” jako wyjście, ponieważ pozycja ta jest powtarzana maksymalne czasy. Może ktoś pomóc w tejPowrót max powtarzane pozycja na liście

+0

Pytanie jest niejasne. –

Odpowiedz

11

Można używać LINQ:

string maxRepeated = prod.GroupBy(s => s) 
         .OrderByDescending(s => s.Count()) 
         .First().Key; 
23

Nie absolutnie najbardziej wydajny, ale to działa:

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

To jest bardziej wydajne:

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

, ale wymaga rozszerzenia MoreLinqMaxBy

EDIT (jak w komentarzu):

Jeśli chcesz wszystkie max powtarzające się elementy w przypadku więzów, oto możliwe rozwiązanie:

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(); 
+1

Obawiam się, że to podejście zwróci tylko pierwszy wynik w przypadku powiązań, tj. Wiele kluczy mających maksymalną liczbę wystąpień. –

+1

@IvanG: OP nie podał nic na ten temat, jednak dodałem możliwe rozwiązanie ... – digEmAll

+0

@digEm Czy możesz napisać również logikę 'min' tego? –