我在Key值对中存储字符串和int值。
var list = new List<KeyValuePair<string, int>>();
添加时我需要检查列表中是否已存在字符串(Key),如果存在,我需要将其添加到Value而不是添加新密钥。
如何检查和添加?
答案 0 :(得分:30)
您可以使用Dictionary代替列表,然后检查contains key是否将新值添加到现有密钥
int newValue = 10;
Dictionary<string, int> dictionary = new Dictionary<string, int>();
if (dictionary.ContainsKey("key"))
dictionary["key"] = dictionary["key"] + newValue;
答案 1 :(得分:7)
使用字典。 Dictionary in C#我建议你阅读这篇文章Dictonary in .net
Dictionary<string, int> dictionary =
new Dictionary<string, int>();
dictionary.Add("cat", 2);
dictionary.Add("dog", 1);
dictionary.Add("llama", 0);
dictionary.Add("iguana", -1);
检查。使用ContainsKey ContainsKey
if (dictionary.ContainsKey("key"))
dictionary["key"] = dictionary["key"] + yourValue;
答案 2 :(得分:5)
如果您需要使用该列表,则必须预先列出该列表,然后查找密钥。 简单地说,您可以使用哈希表。
答案 3 :(得分:4)
您的需求恰好描述了Dictionary
s的设计?
Dictionary<string, string> openWith =
new Dictionary<string, string>();
// Add some elements to the dictionary. There are no
// duplicate keys, but some of the values are duplicates.
openWith.Add("txt", "notepad.exe");
// If a key does not exist, setting the indexer for that key
// adds a new key/value pair.
openWith["doc"] = "winword.exe";
答案 4 :(得分:4)
当然,在您的情况下,字典更可取。您无法修改KeyValue<string,int>
类的值,因为它是不可变的。
但即使您仍想使用List<KeyValuePair<string, int>>();
。您可以使用IEqualityComparer<KeyValuePair<string, int>>
。代码就像。
public class KeyComparer : IEqualityComparer<KeyValuePair<string, int>>
{
public bool Equals(KeyValuePair<string, int> x, KeyValuePair<string, int> y)
{
return x.Key.Equals(y.Key);
}
public int GetHashCode(KeyValuePair<string, int> obj)
{
return obj.Key.GetHashCode();
}
}
并在像
这样的包含中使用它var list = new List<KeyValuePair<string, int>>();
string checkKey = "my string";
if (list.Contains(new KeyValuePair<string, int>(checkKey, int.MinValue), new KeyComparer()))
{
KeyValuePair<string, int> item = list.Find((lItem) => lItem.Key.Equals(checkKey));
list.Remove(item);
list.Add(new KeyValuePair<string, int>("checkKey", int.MinValue));// add new value
}
听起来不太好。
希望此信息能够帮助..
答案 5 :(得分:1)
对于必须使用列表的任何人(对我来说就是这种情况,因为它没有Dictionary要做的事情),您可以使用lambda表达式查看列表是否包含键:
list.Any(l => l.Key == checkForKey);