我有字符串人(键)和字符串地址(值)的字典。我希望有一个if语句,如果我的字典中的任何键包含子字符串'anders',则返回true。有没有办法做到这一点?我已经尝试过dict.ContainsKey(“anders”),但如果任何键被明确命名为“anders”,则返回true。即使钥匙是安德森或安徒生,我也希望它能回归真实。我知道这是一个非常奇怪的案例,但我需要它才能达到目的。
由于
答案 0 :(得分:6)
您必须遍历集合并检查每个集合。 LINQ Any
方法使这很简单:
dict.Keys.Any(k => k.Contains("anders"))
答案 1 :(得分:2)
每个人都已经指出了明显的(和正确的)Any
方法,但有一点需要注意:如果子字符串的大小写也是正确的,那么使用String.Contains
作为谓词只会返回true。要进行不区分大小写的搜索,请使用简单的Regex:
dict.Keys.Any(x => Regex.IsMatch(x, "(?i)anders"));
或者将IndexOf与StringComparison参数一起使用(如Case insensitive 'Contains(string)'中所示):
dict.Keys.Any(x => x.IndexOf("anders", StringComparison.InvariantCultureIgnoreCase) >= 0);
答案 2 :(得分:1)
字典键没有“通配符搜索”。为了进行这种类型的搜索,您将失去字典为您提供的O(常量)搜索。
您必须迭代字典的键并查找包含所需子字符串的字符串。请注意,这将是一个O(n * X)迭代,其中n是键的数量,X是键字符串的平均大小。
有一个漂亮的单行有助于:
bool containsKey = myDictionary.Keys.Any(x => x.Contains("mySubString"));
但这是一次沉重的行动。
答案 3 :(得分:0)
var pair = dict.FirstOrDefault(kvp => kvp.Key.Contains("anders"));
答案 4 :(得分:0)
if(dict.Keys.Any(k=>k.Contains("anders")))
{
//do stuff
}
答案 5 :(得分:0)
您可以迭代字典的键并检查它是否包含字符串:
bool found = false;
foreach (string key in dict.Keys)
{
if (key.Contains("anders"))
{
found = true;
break;
}
}
或使用LINQ:
bool found = dict.Keys.Any(key => key.Contains("anders"));