【问题标题】:How can I subtract a number from a value in a C# dictionary如何从 C# 字典中的值中减去一个数字
【发布时间】:2022-01-09 20:03:43
【问题描述】:

我需要从 Dictionary<string, int> 的值中减去 1,因为 int 包含在输入 foreach 时需要减少的很多数量,但我似乎没有找到解决方案。

foreach(KeyValuePair<string, int> i in myDictionary)

i.Value -= 1;

以上是不可能的,如果我尝试做myDictionary[i] -= 1 我仍然得到错误。有什么建议吗?

【问题讨论】:

  • 这是因为字典包含的数据类型不能接受算术 - 运算符,也就是字符串,如果它只包含一个整数,这是可能的
  • 那我怎样才能改变特定键的值呢?
  • foreach (var key in myDictionary.Keys) myDictionary[key] += 1;
  • 查看 DavidG 的评论,应该可以的

标签: c# dictionary


【解决方案1】:

您不能更改 keyvaluepair 的值,因为它是只读的。试试这个代码。在visual studio中测试过

  1. 您可以用新的键值对替换
dict = dict.ToDictionary(kvp => kvp.Key, kvp => kvp.Value -1);
  1. 或者只是改变值
 for (int i = 0; i < myDictionary.Count; i++)
 {
        string key = dict.Keys.ElementAt(i);
        dict[key]-=1;
  }

【讨论】:

    【解决方案2】:

    您的字典在此处由string 类型的键索引。所以你可以这样做:

    myDictionary["some value"] -= 1;
    

    如果你想从每个值中减去 1,那么你可以这样做:

    foreach (var key in myDictionary.Keys) 
    {
        myDictionary[key] -= 1;
    }
    

    示例:https://dotnetfiddle.net/L9CV0B

    【讨论】:

    • @Jamiec 好地方,谢谢!
    • 所以 OP 代码中的实际问题是 KeyValuePair&lt;string,int&gt; 是一个结构,所以他们的代码只更改了该迭代结构中的值,而不是字典中的值。
    • 实际问题是Value in KeyValuePair&lt;K,V&gt; is readonly!
    • 我得到“System.InvalidOperationException: 'Collection was modified; enumeration operation may not execute.'”所以也许 foreach 中的myDictionary.keys 不是最好的解决方案
    • @Las Sincas,如果您单击此答案中链接的 dotnet fiddle,您会看到它有效...您可能需要修改语句上方的代码以使其正常运行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    相关资源
    最近更新 更多