列表.在循环中移除
本文关键字:循环 列表 | 更新日期: 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);
}
}
旁注:尽量不要用"=="和/或"!="测试布尔值,而是使用表达式本身或需要否定符号