答えて
実際には言語によって異なります。配列を突き抜けたり、配列を変更したりすると爆発する人もいます。いくつかは配列を使用し、爆発しません。あるものは、イテレータを呼び出すもの(完全に頑強なもの)もあります。
位置情報を正しく維持するためにコレクションの変更を追跡する列挙子をサポートするために、かなり洗練されたコレクションを使用できます。たとえそれがいくつかの妥協または仮定を行う必要があるとしても。そのため、ほとんどの図書館では、予期せぬ挙動について、そのようなことを禁止しています。
したがって、最も安全なアプローチはループすることです。削除が必要なものへの参照を収集し、その後、収集された参照を使用して元のコレクションからアイテムを削除します。
foreachの概念を理解する必要があります。実際には、プログラミング言語に依存します。しかし、一般的な答えとしてforeach内のコレクションを変更しないようにしてください
一般的に、foreach
ループ内のコレクションを変更することは、あなたの意図がプログラムには分かっていないため、悪い考えです。変更前にすべての項目をループすることを意味しましたか、それとも単に新しい設定を使用したいのですか?既にループされているアイテムはどうですか?
代わりに、コレクションを変更する場合は、ループスルーするアイテムの事前定義リストを作成するか、インデックス付きループを使用します。
ハッシュテーブルや辞書などの一部のコレクションには、「位置」の概念はなく、繰り返しの順序は一般的に保証されません。したがって、反復処理中に項目の削除を許可することは非常に困難です。
標準のforループを使用して、アイテムコレクションを逆順に繰り返します。移動するときにアイテムを削除するには問題ありません。
逆順に繰り返して項目を1つずつ削除してください...これは適切な解決策です。
いいえ、そうしないでください。正しい動作は、潜在的な並行性の問題が発生したことを通知することですが、これは選択した言語(例外をスローし、エラーコードを返し、シグナルを発生させます)で行われます。
要素の反復処理中にデータ構造を変更した場合、イテレータは無効になる可能性があります。つまり、コレクションに含まれていないオブジェクトで作業するリスクがあります。あなたはイテレータを使用することを反復しているコレクションから項目を削除するための最良の方法
List<T> toFilter = ...;
List<T> shadow;
for (T element : toFilter)
if (keep(element))
shadow.add(element);
/* If you'll work with toFilter in the same context as the filter */
toFilter = shadow;
/* Alternatively, if you want to modify toFilter in place, for instance if it's
* been given as a method parameter
*/
toFilter.clear();
toFilter.addAll(shadow);
:あなたはいくつかのより複雑な表記法に基づく要素をフィルタリングしたい場合は、この(Javaで)のような何かを行うことができます明らかに。例えば。
List<String> myList = ArrayList<String>();
Iterator<String> myIt = myList.iterator();
while (myIt.hasNext()) {
myIt.remove();
}
- 1. foreachループ内のアイテムのLaravel削除リンク
- 2. foreach内の行を削除する
- 3. リスト内のアイテムを削除するC#
- 4. ListView内のアイテムを削除する
- 5. コンテナ内のアイテムを削除する
- 6. Laravel編集ビュー内のアイテムを削除
- 7. アイテムの配列内のアイテムを削除しますか?
- 8. リストビュー内のアイテムの選択と削除
- 9. foreachループ内の配列要素を削除する
- 10. リストビューのアイテムを削除する最初のアイテムのみを削除する
- 11. foreach()の "、"を削除するには?
- 12. 削除したアイテムを削除キーで削除する
- 13. BaseAdapterを使用してListView内のアイテムを削除する
- 14. カーソルを持つsqliteデータベース内のアイテムを削除する
- 15. イオン - アレイ内のアイテムを削除する際の問題
- 16. アイテム内のSitecoreアイテムの親を取得する方法:削除されたイベント?
- 17. foreachループでswitch文を削除する
- 18. foreachループでノードを削除する
- 19. サービスレイヤのエンティティを削除する:削除(Tアイテム)をforeachするか、削除(List <T>リスト)を呼び出す必要がありますか?
- 20. ローカルストレージ削除アイテム
- 21. トランザクション内で複数のアイテムを作成/削除する方法
- 22. VueJs2:コンポーネント内の親配列からアイテムを削除する
- 23. インデックスに基づいてリスト内のアイテムを削除する
- 24. リスト内のアイテムを一度にインデックスで削除する#
- 25. ループ内のHashtableからアイテムを削除する
- 26. ネストされたリスト内のアイテムを削除するには?
- 27. ListBoxアイテムの削除
- 28. MailItem.Delete [削除済みアイテム]フォルダ内のアイテムの削除を拒否しています
- 29. foreach内のチェックボックスを使ってデータを削除
- 30. データソースからアイテムを削除せずにリストからアイテムを削除する - c#
プログラミング言語? –