通过搜索关键子字符串返回字典中键的存在

我有一个字符串人(键)和字符串地址(值)的字典。 我希望有一个if语句,如果我的字典中的任何键包含子字符串’anders’,则返回true。 有没有办法做到这一点? 我已经尝试过dict.ContainsKey(“anders”),但如果任何键被明确命名为“anders”,则返回true。 即使钥匙是安德森或安徒生,我也希望它返回真实。 我知道这是一个非常奇怪的案例,但我需要它的目的。

谢谢

字典键没有“通配符搜索”。 为了进行这种类型的搜索,您将失去字典为您提供的O(常量)搜索。

您将不得不迭代字典的键并查找包含您需要的子字符串的键。 请注意,这将是一个O(n * X)迭代,其中n是键的数量,X是键字符串的平均大小。

有一个漂亮的单行,将有助于:

bool containsKey = myDictionary.Keys.Any(x => x.Contains("mySubString")); 

但这是一个繁重的操作。

你将不得不迭代集合并检查每一个。 LINQ Any方法使这很简单:

 dict.Keys.Any(k => k.Contains("anders")) 

每个人都已经指出了明显的(和正确的) Any方法,但有一点注意:如果子串的情况也是正确的,那么使用String.Contains作为谓词只会返回true。 要进行不区分大小写的搜索,请使用简单的正则表达式:

 dict.Keys.Any(x => Regex.IsMatch(x, "(?i)anders")); 

或者使用带有StringComparison参数的IndexOf(如不区分大小写的’Contains(string)’ ):

 dict.Keys.Any(x => x.IndexOf("anders", StringComparison.InvariantCultureIgnoreCase) >= 0); 
 var pair = dict.FirstOrDefault(kvp => kvp.Key.Contains("anders")); 
 if(dict.Keys.Any(k=>k.Contains("anders"))) { //do stuff } 

您可以迭代字典的键并检查它是否包含字符串:

 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"));