2012-03-27 303 views
6

可能重複:
Modifying .NET Dictionary while Enumerating through it刪除在遍歷字典

我有一本字典對象時,我遍歷,並做一些操作。根據條件,我應該刪除或保留我正在迭代的鍵值對。迭代時從字典中刪除keyvaluepair的最佳方法是什麼?我試圖用一個單獨的字典對象來跟蹤元素的刪除,但林不知道如何再使用它從我的主詞典或如果那即使是最有效的方式來刪除去做

感謝

回答

9

保存您希望刪除的鍵的列表,當您找到它們時。然後,完成後,遍歷此列表,在您存儲的每個密鑰上調用myDictionary.Remove(key)

+5

這將意味着2次迭代,一個讓文件刪除和其他刪除項目,爲什麼不只是複製你不想刪除的項目到另一個字典? – 2012-03-27 15:41:51

+1

@Euclides - 我真的沒有想到這一點。沒有一個令人信服的理由結束了相同的字典,修改後,我希望在大多數情況下更有效。 – Rawling 2012-03-27 15:48:40

+1

「爲什麼不把你不想刪除的項目複製到其他字典?」 如果預計要刪除的項目數量非常少或清除很少,這將是非常不利的。因此建議取決於數據訪問模式 – Imi 2017-04-26 18:20:18

4

嘗試使用單獨的字典,而不是標記鍵值以刪除要保留的插入da鍵值,並在迭代處和迭代處執行此操作:old_map = new_map。