我正在尝试使用通配符和Dictionary类
创建字符串搜索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 *
因此搜索根据“那是什么”搜索字符串找到“什么是*”。
答案 0 :(得分:4)
如果您可以将字典键更改为regular expressions,例如:
@"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();
}
答案 1 :(得分:2)
您也可以尝试以下操作。看起来更简单。您可以使用的另一种方法是string.EndsWith()
:
return Nodes.Any(item => item.Key.StartsWith("Who is"));
return Nodes.Any(item => item.Key.StartsWith("What is"));
-OR -
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"));