Как удалить списки с наименьшим количеством и сохранить список с наибольшим количеством из основного списка? - PullRequest
2 голосов
/ 04 января 2011

У меня есть список подсписков, как List<List<nodes>>. Я сохранил некоторые списки в списке списков, которые теперь я называю основным списком. Теперь мне нужно сравнить количество элементов в подсписках, то есть списках, которые хранятся в основном списке. Мне нужно сохранить только тот подсписок, который имеет наибольшее количество среди всех подсписков, и удалить оставшиеся подсписки. Как это сделать?

1 Ответ

2 голосов
/ 04 января 2011
List<List<Foo>> mainList = ...

// Find count of biggest sub-list.
int maxCount = mainList.Max(list => list.Count);

// Remove all other sub-lists.
mainlist.RemoveAll(list => list.Count != maxCount);

Обратите внимание, что если имеется несколько подсписков с максимальным количеством, все они будут сохранены.

Если вы не хотите этого, вы можете произвольно выбрать один из них для сохранения:

if(mainlist.Count != 1)
   mainList.RemoveRange(1, mainList.Count - 1);

Если вам не важна производительность и вы не против переназначения переменной, вы можете сделать следующее:

mainList = mainList.OrderByDescending(list => list.Count)
                   .Take(1)
                   .ToList();

EDIT :

В .NET 2.0 вы можете сделать что-то вроде:

public static void KeepBiggestSubList<T>(List<List<T>> mainList)
{
    if (mainList == null)
        throw new ArgumentNullException("mainList");

    if (mainList.Count == 0)
        return;

    List<T> maxList = mainList[0];

    foreach (List<T> list in mainList)
    {
        if (list.Count > maxList.Count)
            maxList = list;
    }

    mainList.Clear();
    mainList.Add(maxList);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...