3

我已将一个列表定义为

List<List<int>> thirdLevelIntersection = new List<List<int>>();

我把代码写成

for(int i = 0; i < 57; i++)
{
    if(my condition)
        thirdLevelIntersection[i] = null;
    else
    {
       //some logic
    }    
}

所以我得到了 0 到 56 个值的列表,一些任意值是空的,比如 thirdlevelIntersection[1],thirdlevelIntersection[10],thirdlevelIntersection[21],thirdlevelIntersection[21],thirdlevelIntersection[14],thirdlevelIntersection[15],thirdlevelIntersection[51 ](共 7 个)。

现在我想从列表中删除这些值。

并且有一个来自thirdlevelIntersection[0] thirdlevelIntersection[49] 的列表。

我该怎么办?

4

3 回答 3

3

完成循环后,请尝试

thirdLevelIntersection.RemoveAll(list => list == null);
于 2013-03-28T01:54:07.717 回答
1

如果您是thirdLevelIntersectionsourceCollection某种类型创建的,则可以使用 Linq。

List<List<int>> thirdLevelIntersection = 
    (from item in sourceCollection
     where !(my condition)
     select item)
    .ToList();

或者,如果您正在通过多个语句构建列表,您可以在创建它时执行此操作:

thirdLevelIntersection.AddRange(
    from item in sourceCollection
    where !(my condition)
    select item);

这消除了在添加项目后从列表中删除项目的必要性。

于 2013-03-28T01:54:38.990 回答
0

您可以在迭代列表时通过调用RemoveAt()然后递减来执行此操作i(因此考虑下一个值)。

List<List<int>> thirdLevelIntersection = new List<List<int>>();

for(int i=0;i<57;i++)
{
    if (my condition)
    {
        thirdLevelIntersection.RemoveAt(i--);
        continue;
    }
    else
    {
        //some logic
    }
}
于 2013-03-28T01:55:07.960 回答