강좌와 팁

대소문자를 구분하지 않는 Dictionary 컬렉션 날짜:2020-11-15 9:57:22 조회수:90
작성자 : 소엔
포인트 : 1417
가입일 : 2020-02-02 00:09:14
방문횟수 : 83
글 189개, 댓글 56개
소개 : SoEn 운영자입니다.
작성글 보기
쪽지 보내기
Dictionary 컬렉션은 키와 값의 쌍을 저장한다. 키는 절대 중복되어서는 안되므로 새로운 키가 들어올 때 이전키와 같은지 비교해야 한다. 기본 비교자는 대소문자를 구분하므로 철자가 같아도 대소문자가 다른 키를 같이 저장할 수 있다.

Dictionary<String, String> dic = new Dictionary<String, String>();
dic.Add("Korea", "서울");
dic.Add("KOREA", "서울");


Korea와 KOREA는 아예 다른 키이다. 그러나 이 상태에서 korea 키를 찾으면 없다고 나온다. korea는 Korea와도 다르기 때문이다.

if (dic.ContainsKey("korea"))  // false

어찌 보면 당연하지만 이런 특성이 불편할 수도 있다. 키를 사용자가 직접 입력한다면 항상 대소문자를 정확하게 입력한다는 보장이 없다. 저장할 때는 PassWord로 저장해 놓고 찾을 때는 password로 찾으면서 왜 없냐고 투덜대기 때문이다. 사전을 대소문자 구분없이 사용하려면 생성자로 대소문자를 무시하는 비교자를 전달한다.


Dictionary<String, String> dic = new Dictionary<String, String>
 (StringComparer.OrdinalIgnoreCase);
dic.Add("Korea", "서울");
//dic.Add("KOREA", "서울");


StringComparer.OrdinalIgnoreCase가 대소문자를 무시하는 비교자이다. 이 비교자로 만든 사전은 대소문자 구성이 달라도 철자만으로 키를 비교한다. 그래서 Korea가 저장된 상태에서 KOREA는 더 추가할 수 없다. 키를 검색할 때도 대소문자를 정확히 적지 않아도 상관 없다.

if (dic.ContainsKey("korea"))  // true

KOREA, Korea, korea, KoReA 등 아무렇게나 적어도 철자만 같으면 잘 찾아낸다. 키는 문자열이라기보다는 일종의 식별기호여서 대소문자를 무시하는 것이 더 어울리는 경우가 많다.
 



개발자의 천국 SoEn

목록보기 삭제 수정 신고 스크랩


로그인하셔야 댓글을 달 수 있습니다.