2010-11-14 18 views

Répondre

6

Il sons comme si vous avez n listes et que vous souhaitez isoler celui avec le plus grand nombre.

Essayez ceci:

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

Vous avez maintenant la liste avec le plus grand nombre d'éléments. Considérez le scénario où il y a 2+ listes avec le même nombre supérieur d'éléments.

+0

Merci beaucoup !! Une solution assez complète :) –

+3

Il est probablement préférable d'utiliser '.First()' que '.Take (1)', car vous récupérerez alors la liste au lieu d'une liste contenant un élément contenant la liste. – 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); 
} 

remplacer i => i avec une fonction définissant "la plus grande taille/nombre".

11

Je suppose que vous avez une collection de listes appelées lists et vous voulez retourner la liste dans cette collection qui a le plus d'éléments. Si oui, essayez ceci:

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

Alternativement, si c'est LINQ à des objets et vous avez un beaucoup des listes que vous voudrez peut-être essayer d'obtenir de meilleures performances en évitant O (n log n) tri:

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

merci Mark! J'aime ta solution. merci pour l'affacturage en temps de tri :) ce sera très utile ... –