循环通过字典

时间:2018-06-03 16:48:12

标签: c#

我有一个包含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 - 这部分仍然是一个大问题。

2 个答案:

答案 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è解决方案。