循环通过字典

web*_*ad3 5 c#

我有一个包含Person和Count值的字典:

Dictionary<string, int> PersonDictionary = new Dictionary<string, int>();
Run Code Online (Sandbox Code Playgroud)

它具有以下值:

Sally, 6
Beth, 5
Mary, 5
Run Code Online (Sandbox Code Playgroud)

我想交替每个人,并在每次循环时将值减1.我在这个问题上陷入困境

什么是最好的方式来获得莎莉和减1然后去贝丝减1然后去玛丽减1然后再回到莎莉......等等.

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

更新:

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

Ous*_* D. 6

使用Linq它将如下:

personDictionary = personDictionary.ToDictionary(e => e.Key, e => e.Value-1);
Run Code Online (Sandbox Code Playgroud)

  • 值得一提的是,这将创建一个"字典"的*副本*,它可能会或可能不会产生不良影响 (2认同)

Fab*_*jan 5

以上都行不通.

它不起作用,因为无法修改foreach循环内的集合并同时迭代它.

这就是为什么当我们遍历字典并尝试修改它时 - 抛出异常.

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

foreach (var ownerKey in PersonDictionary.Keys.ToList())
{
    PersonDictionary[ownerKey]--;
}
Run Code Online (Sandbox Code Playgroud)

这将复制KeysDictionary对象本身和Values集合将保持不变.或者,Aominè如果制作整本字典的副本不是问题,您可以使用s解决方案.