Список возврата с максимальным количеством с использованием Linq - PullRequest
6 голосов
/ 14 ноября 2010

Используя C # и Linq, как бы вернуть List <....> с наибольшим размером / счетчиком?

Ответы [ 3 ]

13 голосов
/ 14 ноября 2010

Я предполагаю, что у вас есть коллекция списков с именем lists, и вы хотите вернуть список в этой коллекции, который содержит наибольшее количество элементов. Если это так, попробуйте это:

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

В качестве альтернативы, если это LINQ to Objects и у вас есть lot списков, вы можете попробовать это, чтобы повысить производительность, избегая сортировки O (n log n):

int maxCount = lists.Max(list => list.Count());
var listWithLargestCount = lists.First(list => list.Count() == maxCount);
6 голосов
/ 14 ноября 2010

Это звучит , как будто у вас есть n списков, и вы хотите выделить один с наибольшим количеством.

Попробуйте это:

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

Теперь у вас есть список с наибольшим количеством элементов. Рассмотрим сценарий, в котором есть более 2 списков с одинаковым количеством элементов.

1 голос
/ 14 ноября 2010
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);
}

заменить i => i на функцию, определяющую "самый большой размер / количество".

...