2

我有一个需要迭代的数据集中的行列表。

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

由于列表正在修改,我不能使用 foreach() 循环。

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

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

有没有更简单的方法?

4

5 回答 5

8

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

List<string> Items = ...
for(int i = Items.Count - 1; i >= 0; i--)
{
   if(Items[i] == "DELETE ME")
   {
      Items.RemoveAt(i);
   }
}

这会导致项目以相反的顺序处理,因此如果您删除一个项目,它不会影响任何仍待处理的项目的位置。

于 2009-07-23T17:01:45.413 回答
2

在修改我正在迭代的列表时,我总是发现用我想要保留的项目构建一个新列表是最容易的,然后使用新列表来做我想做的任何事情。

我想,这真的取决于你完成后对数据的处理方式。

于 2009-07-23T17:07:54.043 回答
0
for(int i = list.Length -1, i >= 0; i--)
{
   // process and delete if you want
}
于 2009-07-23T17:02:24.023 回答
0


int i = 0;
while (i < dataSet.Tables[0].Rows.Count) {
    if (some_condition) {
       dataSet.Tables[0].Rows.RemoveAt(i);
       continue;
    }
    i++;
}
于 2009-07-23T17:24:55.147 回答
0

如果您可以将数据放入链接列表中,那么您就是黄金。

于 2009-07-23T17:39:20.750 回答