我要检查,如果字典中的值中有特定字符串,并且我已经尝试过这种方法,但是不是。工作。
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");
}
我想检查是否有字符串“ pop” ,我希望“是” ,但是代码不起作用。另一个示例是检查是否存在“跳舞” ,并且预期输出将为“否” 。我希望你明白我的意思。如果您能向我解释最好的方法,我将不胜感激。
答案 0 :(得分: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));
如其他地方所述,如果您经常使用这样的字典,则可能表明您应该使用其他数据结构。它肯定会工作,但不会利用字典专用的廉价“按键查找”功能。
答案 1 :(得分:2)
private static bool ContainsValue(Dictionary<string, List<string>> dictionary, string value)
{
return dictionary.Keys.Any(k => dictionary[k].Contains(value));
}
但是您永远不要以这种方式使用字典。仅当您要按键查找时,才应使用它。但是在这种情况下,您正在搜索一个值。