จะอัปเดตค่าสำหรับคีย์เฉพาะในพจนานุกรมได้Dictionary<string, int>
อย่างไร
จะอัปเดตค่าสำหรับคีย์เฉพาะในพจนานุกรมได้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
++dictionary["test"];
หรือdictionary["test"]++;
เฉพาะในกรณีที่มีรายการในพจนานุกรมที่มีค่าคีย์ "test" - ตัวอย่าง: if(dictionary.ContainsKey("test")) ++dictionary["test"];
else dictionary["test"] = 1; // create entry with key "test"
คุณสามารถทำตามวิธีนี้:
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);
}
}
ขอบที่คุณได้รับที่นี่คือคุณตรวจสอบและรับค่าของคีย์ที่เกี่ยวข้องในการเข้าถึงพจนานุกรมเพียง 1 ครั้ง หากคุณใช้ContainsKey
เพื่อตรวจสอบการมีอยู่และอัพเดตค่าโดยใช้dic[key] = val + newValue;
คุณจะต้องเข้าสู่พจนานุกรมสองครั้ง
dic.Add(key, newValue);
dic[key] = newvalue;
ใช้ 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;
}
}
update - แก้ไขที่มีอยู่เท่านั้น วิธีหลีกเลี่ยงผลข้างเคียงจากการใช้ตัวทำดัชนี:
int val;
if (dic.TryGetValue(key, out val))
{
// key exist
dic[key] = val;
}
อัปเดตหรือ (เพิ่มใหม่หากไม่มีค่าใน dic)
dic[key] = val;
เช่น:
d["Two"] = 2; // adds to dictionary because "two" not already present
d["Two"] = 22; // updates dictionary because "two" is now present
สิ่งนี้อาจใช้ได้กับคุณ:
สถานการณ์ที่ 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[keyToMatchInDict] = newValToAdd; //or you can do operations such as ...dictToUpdate[keyToMatchInDict] += 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[keyToMatch] = objInValueListToAdd;
หวังว่ามันจะมีประโยชน์สำหรับใครบางคนที่ต้องการความช่วยเหลือ