C# 检查字典中是否有给定字符串
我想检查字典值的中是否有特定的字符串,我已经尝试过这种方法,但它不起作用C# 检查字典中是否有给定字符串,c#,dictionary,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(n
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");
}
var dict=newdictionary();
dict[“John”]=newlist(){“pop”,“folk”};
dict[“Mark”]=newlist(){“流行音乐”、“爵士乐”};
if(dict.ContainsValue(新列表(){“pop”}))
{
控制台。WriteLine(“是”);
}
其他的
{
控制台。写入线(“否”);
}
我想检查是否存在字符串“pop”,我希望“yes”,但代码不起作用。另一个示例是检查是否存在“dance”,预期输出将是“no”。我希望你明白我的意思。如果你能向我解释一下最好的方法,我将不胜感激 私有静态bool包含值(字典、字符串值)
private static bool ContainsValue(Dictionary<string, List<string>> dictionary, string value)
{
return dictionary.Keys.Any(k => dictionary[k].Contains(value));
}
{
返回dictionary.Keys.Any(k=>dictionary[k].Contains(value));
}
但是你不应该这样使用字典。只有在需要按键查找时才应使用它。但在本例中,您正在搜索一个值。
dict.ContainsValue
因以下两个原因不起作用:
不会覆盖List
,因此您正在针对新对象检查引用相等性Equals
查找一个相等的值-您要查找一个包含特定键的值。这将是一个奇怪的相等比较器,它声称具有两个不同值的列表等于其中一个值ContainsValue
dictionary.Values
获取一系列值,然后使用Any
检查任何值是否包含您要查找的值:
private static bool ContainsValue(Dictionary<string, List<string>> dictionary, string value)
=> dictionary.Values.Any(list => list.Contains(value));
私有静态bool包含值(字典、字符串值)
=>dictionary.Values.Any(list=>list.Contains(value));
正如其他地方提到的,如果您经常像这样使用字典,这可能表明您应该使用不同的数据结构。它肯定会起作用,但不会利用字典设计的廉价“按键查找”功能。第一个想法-在foreach循环中检查
值是否,因为列表包含您的元素(pop
或dance
)。您的dict.ContainsValue(new List(){“pop”})
不起作用,因为dict
中没有new List(){“pop”}
这样的值。在dict
中,您的值部分包含您的值这是另一回事。非常感谢。是的,我知道当我想按键查找时,我应该只使用字典,但我正在测试一些问题。这会找到键,然后对每个键进行查找-使用值属性更简单,因为我们只关心值。