我在键值对中存储一个字符串和 int 值。
var list = new List<KeyValuePair<string, int>>();
添加时我需要检查字符串(键)是否已经存在于列表中,如果存在我需要将其添加到值而不是添加新键。
如何查看和添加?
使用字典。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
if (dictionary.ContainsKey("key"))
dictionary["key"] = dictionary["key"] + yourValue;
如果你需要使用列表,你必须foreach列表,并寻找键。很简单,你可以使用哈希表。
您的需求准确地描述了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";
当然,在您的情况下,字典更可取。您不能修改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();
}
}
并在 Contains like 中使用它
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
}
这听起来不太好。
希望这个信息有帮助..
对于必须使用 List 的任何人(对我来说就是这种情况,因为它做 Dictionary 不做的事情),您可以使用 lambda 表达式来查看 List 是否包含键:
list.Any(l => l.Key == checkForKey);