字典通配符搜索

时间:2013-04-17 21:18:30

标签: c# regex search dictionary

我正在尝试使用通配符和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 *

因此搜索根据“那是什么”搜索字符串找到“什么是*”。

2 个答案:

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