Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 대소문자를 구분하지 않는 딕셔너리(Dictionary) 만드는 방법

C#에서 키를 비교할 때 대소문자를 무시하고 싶다면, 대소문자를 구분하지 않는(case-insensitive) 딕셔너리를 사용하면 됩니다. 기본 Dictionary는 키를 비교할 때 대소문자를 구분하기 때문에 "cricket"과 "CRICKET"은 서로 다른 키로 취급됩니다.

대소문자 구분 없이 선언하는 방법

Dictionary를 선언할 때 생성자에 다음 비교자(comparer)를 지정하면 됩니다.

StringComparer.OrdinalIgnoreCase

이 값을 Dictionary 생성자에 전달하면, 이후 모든 키 비교가 대소문자와 관계없이 수행됩니다.

Dictionary<string, int> dict = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);

전체 예제 코드

using System;
using System.Collections.Generic;

public class Program {
    public static void Main() {
        // 대소문자를 구분하지 않는 Dictionary 선언
        Dictionary<string, int> dict = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);

        dict.Add("cricket", 1);
        dict.Add("football", 2);

        foreach (var val in dict) {
            Console.WriteLine(val.ToString());
        }

        // "cricket"과 "CRICKET"은 같은 키로 취급됩니다.
        Console.WriteLine(dict["cricket"]);   // 1 출력
        Console.WriteLine(dict["CRICKET"]);   // 1 출력
    }
}

실행 결과

[cricket, 1]
[football, 2]
1
1

동작 원리

Dictionary 생성자에 IEqualityComparer<T>를 전달하면, 해시 계산과 키 비교 과정에서 해당 비교자가 사용됩니다. OrdinalIgnoreCase는 문자열의 각 문자를 코드 값 기준으로 비교하되 대소문자 차이는 무시하므로, 별도의 문화권(culture) 규칙에 영향을 받지 않고 빠르게 동작합니다.

참고: 다른 비교 옵션

  • StringComparer.Ordinal: 대소문자를 구분하는 기본 정렬 방식
  • StringComparer.OrdinalIgnoreCase: 대소문자를 구분하지 않음 (가장 일반적으로 권장)
  • StringComparer.InvariantCultureIgnoreCase: 고정 문화권 기준으로 대소문자를 무시하며 비교

사용자 입력을 키로 저장하는 경우처럼 대소문자 혼용이 예상되는 상황이라면, 위 예제처럼 StringComparer.OrdinalIgnoreCase를 지정해 두는 것이 안전하고 실수를 줄일 수 있는 좋은 습관입니다.