如何在C#中更新存储在Dictionary中的值?

Ami*_*mit 412 c# dictionary

如何更新字典中特定键的值Dictionary<string, int>

cca*_*oni 686

只需指定给定键的字典并指定一个新值:

myDictionary[myKey] = myNewValue;
Run Code Online (Sandbox Code Playgroud)

  • 这个操作的有趣之处在于,它把 UPSERT(key, value) 放入字典中。杰出的! (4认同)
  • @greenoldman 啊我明白你的意思了,我误解了你所说的“修改整个字典”的意思,你指的是它使任何当前的迭代器无效,对吗? (3认同)
  • @Philm,一个巨大的缺点是,这种方法被视为修改整个字典,换句话说,它不仅仅是更新。 (2认同)
  • @nevelis, var dict = new Dictionary&lt;string,int&gt;() { { "a" , 0 }, { "b", 0 }, }; foreach (var key in dict.Keys) dict[key] = 1; 如果它只是**值**的更新,那么在迭代**键**时不会出现异常,因为表面上一个与另一个无关。 (2认同)

Ami*_*mit 187

可以通过访问密钥作为索引

例如:

Dictionary<string, int> dictionary = new Dictionary<string, int>();
dictionary["test"] = 1;
dictionary["test"] += 1;
Console.WriteLine (dictionary["test"]); // will print 2
Run Code Online (Sandbox Code Playgroud)

  • 不要叫字典列表,称之为狗或猫或字典 (15认同)
  • 如果列表中没有项目"test",则列出["test"] = list ["test"] + 1; 会引发KeyNotFoundException!纯粹的非现有索引器分配将起作用.list ["test"] = 1; (10认同)

max*_*rce 43

您可以遵循以下方法:

void addOrUpdate(Dictionary<int, int> dic, int key, int newValue)
{
    int val;
    if (dic.TryGetValue(key, out val))
    {
        // yay, value exists!
        dic[key] = val + newValue;
    }
    else
    {
        // darn, lets add the value
        dic.Add(key, newValue);
    }
}
Run Code Online (Sandbox Code Playgroud)

您在这里获得的优势是,只需1次访问字典即可检查并获取相应密钥的值.如果您使用ContainsKey检查存在并使用更新值,dic[key] = val + newValue;那么您将访问字典两次.

  • @ntroncos不正确,它将使用提供的值将该键添加到字典中.+ =不会对不存在的键起作用,因为它只是dic [key] = value + dic [key]的语法糖. (8认同)
  • 而不是`dic.Add(key,newValue);`你可以使用`dic [key] = newvalue;`. (4认同)
  • @superpuccio 你得到一个 KeyNotFoundException (2认同)
  • 这应该是问题的答案,因为它涉及更新字典而不仅仅是添加它. (2认同)

小智 18

这个简单的检查将执行更新插入,即更新或创建。

if(!dictionary.TryAdd(key, val))
{
    dictionary[key] = val;
}
Run Code Online (Sandbox Code Playgroud)


INT*_*24h 13

使用LINQ:访问密钥的字典并更改值

Dictionary<string, int> dict = new Dictionary<string, int>();
dict = dict.ToDictionary(kvp => kvp.Key, kvp => kvp.Value + 1);
Run Code Online (Sandbox Code Playgroud)

  • 为这么简单的事情创建另一本字典对我来说没有意义。检查 ccalboni 的答案。 (4认同)

Mat*_*hew 9

这是一种通过索引更新的方式,就像foo[x] = 9在哪里x是键,9是值

var views = new Dictionary<string, bool>();

foreach (var g in grantMasks)
{
    string m = g.ToString();
    for (int i = 0; i <= m.Length; i++)
    {
        views[views.ElementAt(i).Key] = m[i].Equals('1') ? true : false;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • m [i] .Equals('1')已经评估为bool,所以添加?true:false不是必需的 (11认同)