24

我在键值对中存储一个字符串和 int 值。

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

添加时我需要检查字符串(键)是否已经存在于列表中,如果存在我需要将其添加到值而不是添加新键。
如何查看和添加?

4

6 回答 6

34

您可以使用字典代替 List并检查它是否包含键,然后将新值添加到现有键

int newValue = 10;
Dictionary<string, int> dictionary = new Dictionary<string, int>();
if (dictionary.ContainsKey("key"))
    dictionary["key"] = dictionary["key"] + newValue;
于 2013-01-23T05:38:25.137 回答
7

使用字典。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;
于 2013-01-23T05:37:33.697 回答
5

如果你需要使用列表,你必须foreach列表,并寻找键。很简单,你可以使用哈希表。

于 2013-01-23T05:40:21.510 回答
4

您的需求准确地描述了Dictionarys 的设计?

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";
于 2013-01-23T05:36:00.987 回答
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();
    }
}

并在 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
        }

这听起来不太好。

希望这个信息有帮助..

于 2013-01-23T06:07:52.390 回答
3

对于必须使用 List 的任何人(对我来说就是这种情况,因为它做 Dictionary 不做的事情),您可以使用 lambda 表达式来查看 List 是否包含键:

list.Any(l => l.Key == checkForKey);
于 2019-08-09T22:23:07.337 回答