检查字典中是否有给定的字符串

Nik*_*ova 3 c# dictionary

我想检查字典值中是否有特定的字符串,并且我已经尝试过这种方式,但是它不起作用。

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”。我希望你明白我的意思。如果您能向我解释最好的方法,我将不胜感激。

Jon*_*eet 7

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)

如在其他地方所述,如果您经常发现自己使用这样的字典,则可能表明您应该使用其他数据结构。它肯定会工作,但不会利用字典设计的廉价“按键查找”功能。