首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何遍历正在修改的列表?

如何遍历正在修改的列表?
EN

Stack Overflow用户
提问于 2009-07-23 16:58:17
回答 5查看 1K关注 0票数 2

我有一个数据集中需要遍历的行列表。

问题在于,迭代中的处理可能会从列表中删除一行或多行。

因为列表正在被修改,所以我不能使用foreach()循环。

但由于某些删除可能发生在我正在处理的元素之前,所以我也不能使用for()循环(即,如果我正在处理元素,这会导致删除元素和其他元素,我想不出一种方法来调整i以正确地指向我正在处理的元素之后的元素)。

你将如何解决这个问题?我目前的想法是始终处理列表中的第一个元素。如果它被删除,则处理新的第一个元素。如果没有被删除,则将其移到"alreadyProcessed“列表中,并处理新的第一个元素。

有没有更简单的方法?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-07-23 17:07:54

当修改我正在遍历的列表时,我总是发现最简单的方法是用我想要保留的项构建一个新的列表,然后使用新的列表来做我要做的任何事情。

我想,这真的取决于你完成后对数据做了什么。

票数 2
EN

Stack Overflow用户

发布于 2009-07-23 17:01:45

通常,这是通过反向循环完成的:

代码语言:javascript
复制
List<string> Items = ...
for(int i = Items.Count - 1; i >= 0; i--)
{
   if(Items[i] == "DELETE ME")
   {
      Items.RemoveAt(i);
   }
}

这会导致项目按相反顺序进行处理,因此,如果删除项目,则不会影响任何仍要处理的项目的位置。

票数 8
EN

Stack Overflow用户

发布于 2009-07-23 17:02:24

代码语言:javascript
复制
for(int i = list.Length -1, i >= 0; i--)
{
   // process and delete if you want
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1173110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档