gpt4 book ai didi

c# - 将字典的所有值除以一个值

转载 作者:行者123 更新时间:2023-11-30 13:11:57 24 4
gpt4 key购买 nike

我在 C# 中有以下代码,其中 vector 是 [string,double] 类型的字典。我想将该字典中的所有值除以一个值“magnitude”。现在,我天真的第一个代码如下:

foreach (var key in vector.Keys)
{
vector[key] = vector[key] / magnitude;
}

这会抛出一个异常,表示 Collection 已在 foreach 中被修改。我可能会创建第二个字典来写入结果值,但我不想这样。

有没有更简单的方法来做到这一点,例如使用对所有字典值进行操作的方法,如下所示?

vector.Values().Aggreagate(), vector.Values().Average() 

最佳答案

执行此操作的最简单方法是在迭代之前复制键列表:

foreach (var key in vector.Keys.ToList())
{
vector[key] = vector[key] / magnitude;
}

或者:

foreach (var entry in vector.ToList())
{
vector[entry.Key] = entry.Value / magnitude;
}

(这避免了双重查找,但当然会复制更多数据。)

诚然,修改现有条目的值被视为阻止您继续迭代键的更改,这有点遗憾。

另一种方法是将可变包装器类型作为值,然后您可以使用:

foreach (var wrapper in vector.Values)
{
wrapper.Value = wrapper.Value / 10;
}

那根本不会修改字典——只是修改字典引用的对象。在大多数情况下,我个人不会这样做,但它可能适合您。

关于c# - 将字典的所有值除以一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27919141/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com