如何检查词典中是否存在键值对

时间:2012-03-10 21:33:53

标签: c# .net data-structures dictionary

如何检查词典中是否存在键/值对<>?我可以使用ContainsKeyContainsValue检查密钥或值是否存在,但我不确定如何检查密钥/值对是否存在。

由于

10 个答案:

答案 0 :(得分:38)

如果不存在,那么就不存在了...所以获取与该键相关联的值,并检查这是否是你的值正在寻找。例如:

// Could be generic of course, but let's keep things simple...
public bool ContainsKeyValue(Dictionary<string, int> dictionary,
                             string expectedKey, int expectedValue)
{
    int actualValue;
    if (!dictionary.TryGetValue(expectedKey, out actualValue))
    {
        return false;
    }
    return actualValue == expectedValue;
}

或稍微“巧妙”(通常要避免......):

public bool ContainsKeyValue(Dictionary<string, int> dictionary,
                             string expectedKey, int expectedValue)
{
    int actualValue;
    return dictionary.TryGetValue(expectedKey, out actualValue) &&
           actualValue == expectedValue;
}

答案 1 :(得分:24)

字典只支持每个键一个值,所以:

// key = the key you are looking for
// value = the value you are looking for
YourValueType found;
if(dictionary.TryGetValue(key, out found) && found == value) {
    // key/value pair exists
}

答案 2 :(得分:6)

if (myDic.ContainsKey(testKey) && myDic[testKey].Equals(testValue))
     return true;

答案 3 :(得分:4)

您可以使用 dictionary.TryGetValue

来完成此操作
Dictionary<string, bool> clients = new Dictionary<string, bool>();
                    clients.Add("abc", true);
                    clients.Add("abc2", true);
                    clients.Add("abc3", false);
                    clients.Add("abc4", true);

                    bool isValid = false;

                    if (clients.TryGetValue("abc3", out isValid)==false||isValid == false)
                    {
                        Console.WriteLine(isValid);
                    }
                    else
                    {
                        Console.WriteLine(isValid);
                    }

在上面的代码中,如果条件有两个部分,则第一部分用于检查密钥具有值,第二部分用于将实际值与预期值进行比较。

First Section{clients.TryGetValue("abc3", out isValid)==false}||Second Section{isValid == false}

答案 4 :(得分:1)

var result= YourDictionaryName.TryGetValue(key, out string value) ? YourDictionaryName[key] : "";

如果密钥存在于字典中,它将返回密钥的值,否则将返回一个空白对象。

希望,这段代码对您有所帮助。

答案 5 :(得分:0)

这样的事情

bool exists = dict.ContainsKey("key") ? dict["key"] == "value" : false;

答案 6 :(得分:0)

Jon Skeet的答案的通用版

        public bool ContainsKeyValue<TKey, TVal>(Dictionary<TKey, TVal> dictionnaire,
                                             TKey expectedKey,
                                             TVal expectedValue) where TVal : IComparable
    {
        TVal actualValue;

        if (!dictionnaire.TryGetValue(expectedKey, out actualValue))
        {
            return false;
        }
        return actualValue.CompareTo(expectedValue) == 0;
    }

答案 7 :(得分:0)

简单的通用扩展方法

这是一种快速的通用扩展方法,该方法将ContainsPair()方法添加到任何IDictionary中:

public static bool ContainsPair<TKey, TValue>(this IDictionary<TKey, TValue> dictionary,
                                                   TKey key,
                                                   TValue value)
{
    return dictionary.TryGetValue(key, out var found) && found.Equals(value);
}

这使您可以对像这样的字典进行检查:

if( myDict.ContainsPair("car", "mustang") ) { ... }     // NOTE: this is not case-insensitive

不区分大小写的检查

在使用基于字符串的键时,可以通过在构建字典时使用诸如Dictionary之类的比较器来创建StringComparer.OrdinalIgnoreCase的键大小写不敏感。

但是,要使值比较不区分大小写(假设值也是字符串),可以使用以下版本,该版本添加一个IComparer参数:

public static bool ContainsPair<TKey, TValue>(this IDictionary<TKey, TValue> dictionary,
                                                   TKey key,
                                                   TValue value,
                                                   IComparer<TValue> comparer)
{
    return dictionary.TryGetValue(key, out var found) && comparer.Compare(found, value) == 0;
}

答案 8 :(得分:-1)

首先检查密钥是否存在,如果是,则获取此密钥的值并将其与您正在测试的值进行比较...如果它们相等,则您的字典包含该对

答案 9 :(得分:-3)

请查看以下代码

var dColList = new Dictionary<string, int>();
if (!dColList.Contains(new KeyValuePair<string, int>(col.Id,col.RowId)))
{}

谢谢, Mahesh G