如何找到“赞”来查找词典键?我现在正在做:
mydict.ContainsKey(keyName);
但是有些keyNames附加了一个附加的单词(用空格分隔),我想做一个“喜欢”或.StartsWith()。比较将如下所示:
"key1" == "key1" //match
"key1" == "key1 someword" //partial match
我需要在两种情况下都匹配。
答案 0 :(得分:20)
您可以使用LINQ执行此操作。
以下是两个例子:
bool anyStartsWith = mydict.Keys.Any(k => k.StartsWith("key1"))
bool anyContains = mydict.Keys.Any(k => k.Contains("key1"))
值得指出的是,这种方法的性能会比.ContainsKey方法差,但根据您的需要,性能不会显着。
答案 1 :(得分:2)
mydict.Keys.Any(k => k.StartsWith("key1"));
在枚举Keys
时,您将失去字典的性能优势:
mydict.ContainsKey(someKey); // O(1)
mydict.Keys.Any(k => k.StartsWith("key1")); // O(n)
答案 2 :(得分:1)
如果您运行字符串的.Contains()
方法而不是字典,那么您将得到您想要的内容。
var matchingKeys = mydict.Keys.Where(x => x.Contains("key1"));
答案 3 :(得分:0)
var keys = (from key mydict.keys where key.contains(keyName) select key).ToList();
答案 4 :(得分:0)
可以操纵字典的Keys成员来检查是否存在比平等更复杂的语义。它不一定是LINQ扩展方法检查,但这可能是最简单的。
答案 5 :(得分:0)
如果您想要密钥本身而不是真/假,您可以这样做:
string match = "key1";
var matches = from k in mydict
where k.Key.Contains(match)
select new
{
k.Key
};
答案 6 :(得分:0)
为了匹配和检索“喜欢”键,您可以使用这些扩展名。
public static class Extensions
{
public static bool HasKeyLike<T>(this Dictionary<string, T> collection, string value)
{
var keysLikeCount = collection.Keys.Count(x => x.ToLower().Contains(value.ToLower()));
return keysLikeCount > 0;
}
public static List<string> GetKeysLike<T>(this Dictionary<string, T> collection, string value)
{
return collection.Keys.Select(x => x.ToLower().Contains(value.ToLower())).ToList();
}
}