查找键值对中已存在的值

时间:2013-01-23 05:34:18

标签: c# .net key-value

我在Key值对中存储字符串和int值。

var list = new List<KeyValuePair<string, int>>();

添加时我需要检查列表中是否已存在字符串(Key),如果存在,我需要将其添加到Value而不是添加新密钥。
如何检查和添加?

6 个答案:

答案 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);