2

反復処理が必要なデータセットの行のリストがあります。

問題は、反復の処理によってリストから 1 つ以上の行が削除される可能性があることです。

リストが変更されているため、foreach() ループを使用できません。

しかし、処理中の要素よりも前の要素で一部の削除が発生する可能性があるため、 for() ループも使用できません (つまり、要素を処理していて、要素が削除される場合)また、他の要素、私が処理していた要素に続く要素を正しく指すように 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

データをリンクされたリストに入れることができれば、成功です。

于 2009-07-23T17:39:20.750 に答える
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 に答える