2010-11-14 9 views

risposta

6

e suoni come se si dispone di n liste e si desidera individuare quella con il maggior numero.

Prova questo:

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); 

Ora avete la lista con il maggior numero di elementi. Considera lo scenario in cui esistono più di 2 liste con lo stesso numero superiore di elementi.

+0

Grazie mille !! una soluzione abbastanza completa :) –

+3

Probabilmente è meglio usare '.First()' piuttosto che '.Take (1)', perché in questo caso si recupera la lista invece di una lista con un elemento contenente la lista. – 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); 
} 

sostituire i => i con una funzione che definisce "grande formato/conteggio".

11

Suppongo che tu abbia una raccolta di elenchi denominata lists e che tu voglia restituire l'elenco in questa raccolta che ha il maggior numero di elementi. Se è così, provate questo:

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

In alternativa, se questo è LINQ to Objects e hai un sacco delle liste si potrebbe desiderare di provare questo per ottenere prestazioni migliori evitando la O (n log n) tipo:

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

grazie Marco! Mi piace la tua soluzione. grazie per il factoring in tempo di specie :) che sarà molto utile ... –

Problemi correlati