2017-09-14 1 views
2

내가 같은 사전이 그렇다면 :일치 문자열

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

을 그리고 함수에 의해 잘 살고 문자열 이름을 = ""할 것이다.

내가 찾아처럼, 사전 키에있는 이름과 일치 할 : 이름 = "파올라는"가 "파올라"를 발견하면

  • , "페루"가 아니라 "Paolann", "파라과이 Paulanoso "{Paulanos", "콜롬비아"}에서만 발견 ""

  • 이름 =이 경우

    "하지 은 {"Paulanas는 ","에콰도르 "},

는 .NET 2.0 그것은 N입니다 더 나은 옵션이 있다면 사전이 될 필요가 있습니다. 같은 문자 단위로 같은

뭔가 : 이름 = "Paulanoso"(예를 들어, 문자열, 나던 아무 의미) 경우

  • 단지 Paulanos를 발견, 그것은
  • 하더라도 정확히 전체 문자열을 일치 할 필요가 나던 당신은 키 일치 민감한 경우가하고 싶지 않은 경우 { "Paulanos", "콜롬비아"}
+0

그것은 비록 대소 문자를 구분해야 하는가? –

+0

"Paulanoso"는 "Paulanos"와 일치합니까? 실제 일치 알고리즘이 무엇인지 설명해 주시겠습니까? –

+0

Paulanoso는 내가 추측하는 오타입니다 –

답변

2

: 이름 = "Paolanoso123" 그것을 찾아야한다 : 이름 문자열은 같은 일을 할 것이다 큰 , 당신은 시도 할 수 있습니다 다음과 같은; 당신이 키에 Paulanos-Paulanoso 일치해야하는 경우

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

그러나, 당신은 당신의 일치 규칙과 사용자 정의 문자열 비교자를 구현해야합니다.

+1

실제로 또는 일치 알고리즘이 더 복잡한 당신은 IEqualityComparer의 당신 자신의 구현을 정의하고 그것을 사전의 생성자에 전달할 수 있습니다. https://msdn.microsoft.com/en-us/library/ms132151(v=vs.110).aspx – Simon

1

지금까지 내가 당신의 키워드와 일치하는 이해 :

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