我有一个包含Person和Count值的字典:
Dictionary<string, int> PersonDictionary = new Dictionary<string, int>();
它具有以下值:
Sally, 6
Beth, 5
Mary, 5
我想交替每个人,并在每次循环时将值减1。我在这个问题上碰到了一个真正意义上的障碍
最好的方法是让Sally减1然后再去Beth并递减1然后去Mary并递减1然后再回到Sally ......等等等等。
只需添加进一步的说明我想循环使用它并使用owner.Key
值并将其传递给另一个方法。所以我需要能够一次遍历这本词典。
更新
我的问题有几个问题。一个问题是在循环中递减字典。但我的主要问题是如何遍历每个项[Sally -> Beth -> Mary -> Sally
),直到每个人的值变为0 - 这部分仍然是一个大问题。
答案 0 :(得分:6)
使用Linq它将如下:
personDictionary = personDictionary.ToDictionary(e => e.Key, e => e.Value-1);
答案 1 :(得分:5)
上述DOESN&#39; T。
它不起作用,因为它无法修改foreach
循环内的集合并同时迭代它。
这就是为什么当我们遍历字典并尝试修改它时 - 抛出异常。
为了更改相同的值而不创建它们的副本,我们可以
迭代Keys
集合的副本并使用索引器:
foreach (var ownerKey in PersonDictionary.Keys.ToList())
{
PersonDictionary[ownerKey]--;
}
这将复制Keys
,但Dictionary
对象本身和Values
集合将保持不变。
或者,如果制作整本字典的副本不是问题,则可以使用Aominè
解决方案。