2017-09-14 260 views
2

,所以如果我有一个像一本字典:匹配字符串

Dictionary<string, string> namesDictionary= new Dictionary<string, string> 
      { 
       { "Paola", "Perú" }, 
       { "Paulanos", "Colombia" }, 
       { "Paulanas", "Ecuador" }, 
       { "Pamela", "Venezuela"}, 
       { "Paulina", "Brasil)"}, 
       { "Paolann", "Paraguay"} 
      }; 

我将有字符串名称=“”通过功能设置好的。

我想找到,并在字典中的键匹配的名称,如:

  • 如果name =“保拉”,找到“保拉”,“秘鲁”,而不是“Paolann”,“巴拉圭“

  • 如果name = ”Paulanoso“ 只发现{ ”Paulanos“, ”哥伦比亚“},而不是 { ”Paulanas“, ”厄瓜多尔“},

.NET 2.0 这n值如果有更好的选择,它是必要的,因为它是一本字典。

喜欢的东西逐个字符,如:

  • 如果name =“Paulanoso”(例如字符串,并不意味着任何东西)发现只有Paulanos,它不必须
  • 即使完全匹配整个字符串名称字符串是更大会做这样的事情: 名=“Paolanoso123” 它应该找到:{“Paulanos”,“哥伦比亚”}
+0

它应该是大小写敏感的关系吗? –

+0

“Paulanoso” 匹配 “Paulanos”?你能解释一下实际的匹配算法是什么吗? –

+0

Paulanoso是一个错字我猜 –

回答

2

如果你不希望的关键比赛是区分大小写, 你可以试试 下列;

var collection = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase); 
// fill collection 
var value = collection["paola"]; 

但是,如果你要在密钥匹配PaulanosoPaulanos,你需要实现自定义字符串比较器与您的匹配规则。

+1

确实,或者如果您的匹配算法是更复杂的是你可以定义自己的IEqualityComparer实现,并将其传递给字典的构造函数。 https://msdn.microsoft.com/zh-cn/library/ms132151(v=vs.110).aspx – Simon

1

据我理解你匹配的标准:

var result = namesDictionary 
    .FirstOrDefault(kv => kv.Key.Contains(name) || name.Contains(kv.Key)).Key;