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

最大数のサブリストが複数ある場合は、それらすべてが保持されることに注意してください。

これが必要ない場合は、保持するものの1つを任意に選択できます。

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 に答える