列表.在循环中移除

本文关键字:循环 列表 | 更新日期: 2023-09-27 18:21:21

for (int j = 0; j < list.Count; ++j )
{
     if (list[j].current_status == false)
     {  
       list.RemoveAt(j);  
     }  
}

我想删除列表中所有具有 current_status == false 的项目,但是,执行语句时:列表。RemoveAt(j(,列表。计数将减去一。最后,原始循环不能从列表[0]循环到列表[列表。计数]。我该如何处理这种情况?

谢谢

列表.在循环中移除

您可以使用

RemoveAll而不是RemoveAt

list.RemoveAll(item => item.current_status == false);
int size = list.Count;
for (int j = 0; j < size; ++j )
{
   if (list[j].current_status == false)
   {  
      list.RemoveAt(j);  
      size--;
      j--;
   }  
}

同样运行线性时间,反向循环如下所示:

for (int j = length - 1; j >= 0; j--)
{
    if (!list[j].current_status)
    {  
        list.RemoveAt(j);
    }
}

旁注:尽量不要用"=="和/或"!="测试布尔值,而是使用表达式本身或需要否定符号