关于c#:循环遍历字典


Loop through Dictionary

本问题已经有最佳答案,请猛点这里访问。

我有一本字典,上面有一个人和一个数值:

1
Dictionary<string, int> PersonDictionary = new Dictionary<string, int>();

它具有以下值:

1
2
3
Sally, 6
Beth, 5
Mary, 5

我想替换每个人,每次循环时将值递减1。我在这件事上遇到了一个真正的思维障碍

有什么办法能使萨利降一级,然后到贝丝降一级,然后到玛丽降一级,然后再回到萨利……等等。

只需添加进一步的说明,我想循环使用这个并使用owner.Key值,然后将其传递给另一个方法。所以我需要能够一次遍历这本字典1。

更新:

我的问题有几个问题。一个问题是在循环中对字典进行递减。但我的主要问题是如何遍历每个项目[Sally -> Beth -> Mary -> Sally],直到每个人的值变为0-这部分仍然是个大问题。


使用LINQ,如下所示:

1
personDictionary = personDictionary.ToDictionary(e => e.Key, e => e.Value-1);


The above DOESN'T work.

它不起作用,因为不可能修改foreach循环内部的集合并同时对其进行迭代。

这就是为什么当我们遍历字典并尝试修改它时,会抛出一个异常。

为了更改相同的值而不创建它们的副本,我们可以遍历Keys集合的副本并使用索引器:

1
2
3
4
foreach (var ownerKey in PersonDictionary.Keys.ToList())
{
    PersonDictionary[ownerKey]--;
}

这将复制Keys,但Dictionary对象本身和Values集合将保持不变。或者,如果制作整个词典的副本不是一个问题,您可以使用Aominè的解决方案。