プログラミング中の一般的なシナリオは、リストが与えられればリストがループし、条件が真のときは同じリストのpop()
要素です。リストをループして同じリストから要素をポップするときに要素を見落とさないようにする方法
このような状況では、例えば、私はリストa = [1, 2, 3, 4, 5, 6, 7, 9, 10]
を持っており、質問には奇妙なリストからすべての要素を削除することが求められます。
私はちょうどこのようなアプローチをとっています。
for (int i=0; i<=a.length; i++) {
if (a[i]%2 != 0) {
a.removeElementAtIndex(i);
}
}
さて、これはリストa
に6
件まで正常に動作します。
その後、ループインデックスは6
となり、リスト内の7
を参照します。 7
は奇数であるため、リストから7
を削除します。
今や、ループインデックスは7
になり、リストの10
を指します。そして、リスト内の要素9
は、すでにループによってチェックされているインデックス6
にあります。
この方法ではエラーが発生します。
質問:上記のような状況を引き起こさず、要素上で1つのリストとループだけを使用する方法。
あなたはJSを使用しているようですね。なぜarray.filter()を使用しないのですか?これにより、aのすべての要素が繰り返し処理され、条件に一致する値のみが返されます。したがって、var results = a.filter(function(element){//要素が偶数の場合はtrueを返すロジック}); – nraduka
@nradukaそうすることで新しいリストが作成され、リストをインプレースで変更したいのです。 –
本当に新しいリストを作成しないと主張すれば、アイテムを削除するたびに 'i'を減らすことができます。 –