2

我有一个子列表列表,它是List<List<nodes>>. 我在列表列表中存储了一些列表,现在我将其称为主列表。现在我必须比较子列表中元素的计数,即存储在主列表中的列表。我只需要保留所有子列表中计数最高的子列表并删除剩余的子列表。怎么做?

4

1 回答 1

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

编辑

在 .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);
}
于 2011-01-04T11:57:22.013 回答