我有一个包含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 - 这部分仍然是一个大问题.
使用Linq它将如下:
personDictionary = personDictionary.ToDictionary(e => e.Key, e => e.Value-1);
Run Code Online (Sandbox Code Playgroud)
以上都行不通.
它不起作用,因为无法修改foreach
循环内的集合并同时迭代它.
这就是为什么当我们遍历字典并尝试修改它时 - 抛出异常.
为了更改相同的值而不创建它们的副本,我们可以遍历Keys
集合的副本并使用索引器:
foreach (var ownerKey in PersonDictionary.Keys.ToList())
{
PersonDictionary[ownerKey]--;
}
Run Code Online (Sandbox Code Playgroud)
这将复制Keys
但Dictionary
对象本身和Values
集合将保持不变.或者,Aominè
如果制作整本字典的副本不是问题,您可以使用s解决方案.