2010-11-14 8 views

Antwort

6

Es klingt, als ob Sie n-Listen haben, und Sie möchten mit dem größten Zählwert die eine einzelne aus.

Try this:

List<int> ints1 = new List<int> { 10, 20, 30 }; 
List<int> ints2 = new List<int> { 1, 2, 3, 4 }; 
List<int> ints3 = new List<int> { 100, 200 }; 

var listWithMost = (new List<List<int>> { ints1, ints2, ints3 }) 
        .OrderByDescending(x => x.Count()) 
        .Take(1); 

Sie haben nun die Liste mit der größten Anzahl an Elementen. Betrachten Sie das Szenario, in dem es 2+ Listen mit der gleichen Anzahl von Elementen gibt.

+0

Vielen Dank !! eine ziemlich umfassende Lösung :) –

+3

Es ist wahrscheinlich besser, '.First()' als '.Take (1)' zu verwenden, da dann die Liste statt einer Liste mit einem Element, das die Liste enthält, tatsächlich zurückgegeben wird. – recursive

1
int[] numbers = new int[] { 1, 54, 3, 4, 8, 7, 6 }; 
var largest = numbers.OrderByDescending(i => i).Take(4).ToList(); 
foreach (var i in largest) 
{ 
    Console.WriteLine(i); 
} 

ersetzen i => i mit einer Funktion "größte Größe/count" definieren.

11

Ich nehme an, dass Sie eine Auflistung von Listen haben, die lists genannt wird, und Sie die Liste in dieser Auflistung zurückgeben möchten, die die meisten Elemente enthält. Wenn ja, versuchen Sie dies:

var listWithLargestCount = lists.OrderByDescending(list => list.Count()).First(); 

Alternativ, wenn dies LINQ to Objects, und Sie haben eine Menge von Listen, die Sie wünschen könnte dies versuchen, eine bessere Leistung zu erhalten, indem die O Vermeidung sort (n log n):

int maxCount = lists.Max(list => list.Count()); 
var listWithLargestCount = lists.First(list => list.Count() == maxCount); 
+0

danke Mark! Ich mag deine Lösung. Danke für das Factoring in der Sortierzeit :) das wird sehr nützlich sein ... –