C # 사전 : 선언을 통해 키 대 / 소문자를 구분하지 않도록 만들기
나는이 Dictionary<string, object>
사전을. 예전 Dictionary<Guid, object>
에는 그랬지만 다른 '식별자'가 작동하고 이제 키는 문자열로 처리됩니다.
문제는 Guid
내 소스 데이터 의 키가으로 나오기 VarChar
때문에 이제 키 "923D81A0-7B71-438d-8160-A524EA7EFA5E"
가 "923d81a0-7b71-438d-8160-a524ea7efa5e"
(Guid를 사용할 때 문제가되지 않았습니다) 와 동일 하지 않습니다.
.NET 프레임 워크에 대해 정말 멋지고 좋은 점은 다음과 같이 할 수 있다는 것입니다.
Dictionary<string, CustomClass> _recordSet = new Dictionary<string, CustomClass>(
StringComparer.InvariantCultureIgnoreCase);
그리고 그것은 훌륭하게 작동합니다. 하지만 중첩 된 사전은 어떻습니까? 다음과 같이 :
Dictionary<int, Dictionary<string, CustomClass>> _customRecordSet
= new Dictionary<int, Dictionary<string, CustomClass>>();
이와 같은 중첩 사전에 문자열 비교자를 어떻게 지정합니까?
당신이 외부 사전에 요소를 추가 할 때, 당신은 가능성이 중첩 된 사전의 새 인스턴스를 만들거야 사용하고,이 시점에서 추가 오버로드 된 생성자 됩니다 IEqualityComparer<TKey>
.
_customRecordSet.Add(0, new Dictionary<string, CustomClass>(StringComparer.InvariantCultureIgnoreCase));
업데이트 08/03/2017 : 일화로, StringComparer.OrdinalIgnoreCase
문자의 대소 문자를 무시하고 싶을 때 더 효율적인 어딘가를 읽었습니다 ( "고성능 .NET 코드 작성"에서 생각 합니다). 그러나 이것은 YMMV이므로 완전히 근거가 없습니다.
중첩 된 사전을 사용하려면 초기화해야합니다. 그 시점에서 위에있는 코드를 사용하십시오.
기본적으로 다음과 같은 코드가 있어야합니다.
public void insert(int int_key, string guid, CustomClass obj)
{
if (_customRecordSet.ContainsKey(int_key)
_customRecordSet[int_key][guid] = obj;
else
{
_customRecordSet[int_key] = new Dictionary<string, CustomClass>
(StringComparer.InvariantCultureIgnoreCase);
_customRecordSet[int_key][guid] = obj;
}
}
'code' 카테고리의 다른 글
iOS 앱 충돌, 디버깅 할 때 xcode에서 'X의 iPhone 연결이 끊어졌습니다'라고 표시됨 (0) | 2020.11.02 |
---|---|
Docker Swarm은 볼륨 공유를 어떻게 구현합니까? (0) | 2020.11.02 |
최상위 함수 내에 정의 된 내부 함수를 테스트하고 상호 작용하는 가장 좋은 방법은 무엇입니까? (0) | 2020.11.02 |
const 변수가 때때로 람다에서 캡처 될 필요가없는 이유는 무엇입니까? (0) | 2020.11.02 |
자바 스크립트 개체 ID (0) | 2020.11.02 |