2012-03-27 166 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。