我有一个数据集中需要遍历的行列表。
问题在于,迭代中的处理可能会从列表中删除一行或多行。
因为列表正在被修改,所以我不能使用foreach()循环。
但由于某些删除可能发生在我正在处理的元素之前,所以我也不能使用for()循环(即,如果我正在处理元素,这会导致删除元素和其他元素,我想不出一种方法来调整i以正确地指向我正在处理的元素之后的元素)。
你将如何解决这个问题?我目前的想法是始终处理列表中的第一个元素。如果它被删除,则处理新的第一个元素。如果没有被删除,则将其移到"alreadyProcessed“列表中,并处理新的第一个元素。
有没有更简单的方法?
发布于 2009-07-23 17:07:54
当修改我正在遍历的列表时,我总是发现最简单的方法是用我想要保留的项构建一个新的列表,然后使用新的列表来做我要做的任何事情。
我想,这真的取决于你完成后对数据做了什么。
发布于 2009-07-23 17:01:45
通常,这是通过反向循环完成的:
List<string> Items = ...
for(int i = Items.Count - 1; i >= 0; i--)
{
if(Items[i] == "DELETE ME")
{
Items.RemoveAt(i);
}
}这会导致项目按相反顺序进行处理,因此,如果删除项目,则不会影响任何仍要处理的项目的位置。
发布于 2009-07-23 17:02:24
for(int i = list.Length -1, i >= 0; i--)
{
// process and delete if you want
}https://stackoverflow.com/questions/1173110
复制相似问题