字典通配符搜索
本文关键字:搜索 通配符 字典 | 更新日期: 2023-09-27 18:09:37
我试图创建一个字符串搜索通配符和字典类
Dictionary<string, Node> Nodes = new Dictionary<string, Node>();
public bool ResponceSearch(string search) {
if (Nodes.ContainsKey(search)) {
label1.Text = Nodes[search].GetResult();
return true;
}
}
搜索字符串,如
What is that
和字典包含键,如
Who is *
What is *
所以搜索根据"what is that"搜索字符串找到"what is *"。
如果您可以将字典键更改为合适的正则表达式,如:
@"Who is 'w+"
@"What is 'w+"
那么这个问题就简单多了:
public bool ResponceSearch(string search) {
var node =
(from p in Nodes
where Regex.Matches(p.Key, search)
select p.Value)
.FirstOrDefault();
if (node != null) {
label1.Text = node.GetResult();
return true;
}
}
您甚至可以为此编写扩展方法。例如:
public static bool ContainsKeyPattern<T>(this Dictionary<string, T> nodes, string search)
{
return nodes.Keys.Any(k => Regex.Matches(k, search));
}
public static T GetItemByKeyPattern<T>(this Dictionary<string, T> dict, string search)
{
return
(from p in dict
where Regex.Matches(p.Key, search)
select p.Value)
.First();
}
您也可以尝试以下操作。看起来简单多了。您可以使用的另一个方法是string.EndsWith()
:
return Nodes.Any(item => item.Key.StartsWith("Who is"));
return Nodes.Any(item => item.Key.StartsWith("What is"));
或者
KeyValuePair<string, object> viewDto = ctx.ActionParameters.FirstOrDefault(item => item.Key.ToLower().EndsWith("Who is"));
KeyValuePair<string, object> viewDto = ctx.ActionParameters.FirstOrDefault(item => item.Key.ToLower().EndsWith("What is"));