代码之家  ›  专栏  ›  技术社区  ›  Amit

如何更新c中字典中存储的值?

  •  360
  • Amit  · 技术社区  · 15 年前

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

    6 回复  |  直到 5 年前
        1
  •  602
  •   IT ppl user1825382    12 年前

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

    myDictionary[myKey] = myNewValue;
    
        2
  •  178
  •   Amit    8 年前

    可以将密钥作为索引访问

    例如:

    Dictionary<string, int> dictionary = new Dictionary<string, int>();
    dictionary["test"] = 1;
    dictionary["test"] += 1;
    Console.WriteLine (dictionary["test"]); // will print 2
    
        3
  •  40
  •   max_force    10 年前

    您可以遵循以下方法:

    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);
        }
    }
    

    您在这里得到的优势是,您只需访问字典一次,就可以检查并获取相应键的值。 如果你使用 ContainsKey 检查是否存在并使用更新值 dic[key] = val + newValue; 然后你要访问字典两次。

        4
  •  13
  •   Community skywinder    9 年前

    对键使用linq:access to dictionary并更改值

    Dictionary<string, int> dict = new Dictionary<string, int>();
    dict = dict.ToDictionary(kvp => kvp.Key, kvp => kvp.Value + 1);
    
        5
  •  9
  •   Dean Seo    7 年前

    这里有一种更新索引的方法,就像 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;
        }
    }
    
        6
  •  0
  •   Pierre.Vriens Krzysztof J    6 年前

    这可能对您有用:

    场景1:基本类型

    string keyToMatchInDict = "x";
    int newValToAdd = 1;
    Dictionary<string,int> dictToUpdate = new Dictionary<string,int>{"x",1};
    
    if(!dictToUpdate.ContainsKey(keyToMatchInDict))
       dictToUpdate.Add(keyToMatchInDict ,newValToAdd );
    else
       dictToUpdate.Where(kvp=>kvp.Key==keyToMatchInDict).FirstOrDefault().Value ==newValToAdd; //or you can do operations such as ...Value+=newValToAdd;
    

    场景2:我用于列表作为值的方法

    int keyToMatch = 1;
    AnyObject objInValueListToAdd = new AnyObject("something for the Ctor")
    Dictionary<int,List<AnyObject> dictToUpdate = new Dictionary<int,List<AnyObject>(); //imagine this dict got initialized before with valid Keys and Values...
    
    if(!dictToUpdate.ContainsKey(keyToMatch))
       dictToUpdate.Add(keyToMatch,new List<AnyObject>{objInValueListToAdd});
    else
       dictToUpdate.Where(kvp=>kvp.Key==keyToMatch).FirstOrDefault().Value.Add(objInValueListToAdd);
    

    希望对需要帮助的人有用。