2013-08-12 11 views
0

나에게 주어진 사전에 특정 문자열이 키로 포함되어 있는지 확인하고 싶습니다. 대소 문자를 구분하지 않고이 검사를해야합니다. 예를 들어 누군가 헤더라는 문자열 사전이있는 HTTP 요청 객체를 전달한 경우입니다. "Content-Type"또는 "Content-Type"또는 "Content-Type"이 request.headers 사전의 키인지 확인할 수 있어야합니다.대소 문자를 구분하지 않고 기존 사전에서 키 확인

보통 ContainsKey()은 대소 문자를 구분하여 키를 확인하기 때문에 작동하지 않습니다.

사전을 대소 문자를 구분하지 않고 정의함으로써이 문제를 해결할 방법이 있다는 것도 알고 있습니다. 그러나 여기서 나는 어떤 종류의 사전이 나에게 전달되는지에 대한 통제권이 없다.

전체 사전의 쌍을 반복 지정된 키 확인하는 방법은 다음과 같습니다 :

var match = dictionary.Where(pair => string.Equals(pair.Key, "hello" 
    , StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault(); 

하거나 당신이 사전이 구성되는 방식을 제어 할 수 없기 때문에

+1

* 코드를 묻는 질문은 해결하려는 문제에 대해 최소한의 이해를 보여 주어야합니다. 시도한 솔루션, 작동하지 않는 이유 및 예상 결과를 포함하십시오. * –

+0

시도한 코드를 제공해주십시오. –

+0

[둘러 보았습니다] (http://stackoverflow.com/questions/13995308/case-sensitive) -dictionary-keys)? – Jonesopolis

답변

3

당신은, 당신에게 두 가지 옵션이 사용 가능한이 자신의 비교 자에 새 사전을 만들 :

var caseSensitiveDictionary = new Dictionary<string, string>(dictionary 
    , StringComparer.InvariantCultureIgnoreCase); 

주어진 비교 자 그래서 사전이 경우, 추가되는 키에 대한 해시를 만드는 데 사용되는 것입니다 다른 비교 자로 생성 된 경우 해당 비교자를 사용하는 주어진 문자열의 해시는 대소 문자를 구분하지 않는 비교 자와 일치하지 않으므로 도움이되지 않습니다.

키를 반복해서 읽는 것이 더 나을 때만 사전을 점검 할 것입니다. 한 번에 두 개 이상의 검색을 수행하려는 경우 새롭게 구성된 사전을 사용하는 것이 좋습니다.