我想检查字典值中是否有特定的字符串,并且我已经尝试过这种方式,但是它不起作用。
var dict = new Dictionary<string, List<string>>();
dict["John"] = new List<string>() { "pop", "folk" };
dict["Mark"] = new List<string>() { "pop-folk", "jazz" };
if (dict.ContainsValue(new List<string>() { "pop" }))
{
Console.WriteLine("yes");
}
else
{
Console.WriteLine("no");
}
Run Code Online (Sandbox Code Playgroud)
我想检查是否有字符串“ pop”,我希望是“ yes”,但是代码不起作用。另一个示例是检查是否存在“舞蹈”,并且预期输出将为“ no”。我希望你明白我的意思。如果您能向我解释最好的方法,我将不胜感激。
dict.ContainsValue 不能工作有两个原因:
List<T>不会覆盖Equals,因此您要针对新对象检查引用是否相等ContainsValue寻找相等的值-您想寻找包含特定键的值。这将是一个奇怪的相等比较器,它声称具有两个不同值的列表等于那些值之一。幸运的是,解决方案很简单。您可以使用dictionary.Values获取一系列值,然后使用Any检查是否有任何值包含您要查找的值:
private static bool ContainsValue(Dictionary<string, List<string>> dictionary, string value)
=> dictionary.Values.Any(list => list.Contains(value));
Run Code Online (Sandbox Code Playgroud)
如在其他地方所述,如果您经常发现自己使用这样的字典,则可能表明您应该使用其他数据结构。它肯定会工作,但不会利用字典设计的廉价“按键查找”功能。