2017-09-14 257 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;