辞書Dictionary<string, int>
の特定のキーの値を更新するにはどうすればいいですか?
与えられたキーで辞書をポイントして新しい値を代入するだけです:
myDictionary[myKey] = myNewValue;
インデックスとしてキーにアクセスすることで可能です
例えば:
Dictionary<string, int> dictionary = new Dictionary<string, int>();
dictionary["test"] = 1;
dictionary["test"] += 1;
Console.WriteLine (dictionary["test"]); // will print 2
あなたはこのアプローチに従うことができます:
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);
}
}
ここで得られるEdgeは、辞書への1回のアクセスで対応するキーの値を確認して取得することです。 ContainsKey
を使用して存在を確認し、dic[key] = val + newValue;
を使用して値を更新する場合は、辞書に2回アクセスしています。
LINQを使用:キーの辞書へのアクセスと値の変更
Dictionary<string, int> dict = new Dictionary<string, int>();
dict = dict.ToDictionary(kvp => kvp.Key, kvp => kvp.Value + 1);
これは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;
}
}
これはあなたのために働くかもしれません:
シナリオ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);
助けが必要な人に役立つことを願っています。