English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C# Dictionary(딕셔너리)

Dictionary<TKey, TValue>는 키-값 쌍을 특정한 순서 없이 저장하는 일반적인 집합입니다.

딕셔너리 특성

  • Dictionary<TKey, TValue>는 키-값 쌍을 저장합니다.

  • System.Collection.Generic 네임스페이스에 포함됩니다.

  • IDictionary<TKey, TValue> 인터페이스 구현

  • 키는 유일해야 하며 null일 수 없습니다.

  • 값은 null이나 중복 될 수 있습니다.

  • 인덱서에 관련 키를 전달하여 값을 확인할 수 있습니다. 예를 들어 myDictionary[key]

  • 요소는 KeyValuePair<TKey, TValue> 객체로 저장됩니다.

딕셔너리 생성

Dictionary<TKey, TValue> 객체를 전달하여 저장할 수 있는 키와 값의 타입을 생성할 수 있습니다. 다음 예제는 딕셔너리와 키-값 쌍을 추가하는 방법을 보여줍니다.

IDictionary<int, string> numberNames = new Dictionary<int, string>();
numberNames.Add(1,"One"); //Add() 메서드를 사용하여 키 추가/값
numberNames.Add(2,"Two");
numberNames.Add(3,"Three");
//다음과 같은 런타임 예외가 발생합니다: key already added.
//numberNames.Add(3, "Three"); 
foreach(KeyValuePair<int, string> kvp in numberNames)
    Console.WriteLine("Key: {0}, Value: {1}
//컬렉션 사용-initializer 문법으로 딕셔너리 생성
var cities = new Dictionary<string, string>(){
	{"영국", "런던, 맨체스터, 버밍엄"},
	{"미국", "시카고, 뉴욕, 워싱턴"},
	{"인도", "孟买, 뉴델리, 포나"}
};
foreach(var kvp in cities)
    Console.WriteLine("Key: {0}, Value: {1}

위의 예제에서 numberNames는 Dictionary<int, string> 타입의 딕셔너리이므로 int 키와 문자열 값을 저장할 수 있습니다. 마찬가지로 cities는 Dictionary<string, string> 타입의 딕셔너리이므로 문자열 키와 문자열 값을 저장할 수 있습니다. 딕셔너리는 중복 키나 null 키를 포함할 수 없으며, 값은 중복 키나 null 키를 포함할 수 있습니다. 키는 유일해야 하며, 그렇지 않으면 런타임 예외가 발생합니다.

딕셔너리 요소에 접근

딕셔너리에 접근자를 사용하여 딕셔너리를 확인할 수 있습니다. 키를 지정하여 관련 값을 가져올 수 있습니다. 또한 ElementAt() 메서드를 사용하여 지정된 인덱스에서 KeyValuePair를 가져올 수 있습니다.

var cities = new Dictionary<string, string>(){
	{"영국", "런던, 맨체스터, 버밍엄"},
	{"미국", "시카고, 뉴욕, 워싱턴"},
	{"인도", "孟买, 뉴델리, 포나"}
};
Console.WriteLine(cities["영국"]); //UK 키 값 출력
Console.WriteLine(cities["미국"]);//USA 키 값 출력
//Console.WriteLine(cities["프랑스"]); // 런타임 예외: 실행-시간 예외: 키가 존재하지 않음
//ContainsKey()를 사용하여 알 수 없는 키를 확인합니다
runtime 예외: KeyNotFoundException를 발생시킵니다  
    Console.WriteLine(cities["프랑스"]);
}
//TryGetValue()를 사용하여 알 수 없는 키의 값을 가져옵니다
string result;
if (cities.TryGetValue("프랑스", out result))
{
    Console.WriteLine(result);
}
//ElementAt()를 사용하여 인덱스로 키밸류 쌍을 검색합니다
for (int i = 0; i < cities.Count; i++)
{
    Console.WriteLine("Key: {0}, Value: {1}
}

딕셔너리 업데이트

인덱서에서 키를 지정하여 키의 값을 업데이트합니다. 키가 딕셔너리에 존재하지 않으면 KeyNotFoundException이 발생하므로, 모든 키에 대한 접근 전에 ContainsKey() 메서드를 사용합니다.

var cities = new Dictionary<string, string>(){
	{"영국", "런던, 맨체스터, 버밍엄"},
	{"미국", "시카고, 뉴욕, 워싱턴"},
	{"인도", "孟买, 뉴델리, 포나"}
};
cities["영국"] = "리버풀, 브리스톨"; //UK 키 값 업데이트
cities["미국"] = "로스앤젤레스, 보스턴"; //USA 키 값 업데이트
//cities["프랑스"] = "파리"; //제거 UK
runtime 예외: KeyNotFoundException를 발생시킵니다
    cities["프랑스"] = "파리";
}

딕셔너리 요소 제거

Remove() 메서드는 딕셔너리에서 기존의 키밸류 쌍을 제거합니다. Clear() 메서드는 딕셔너리에서 모든 요소를 제거합니다.

var cities = new Dictionary<string, string>(){
	{"영국", "런던, 맨체스터, 버밍엄"},
	{"미국", "시카고, 뉴욕, 워싱턴"},
	{"인도", "孟买, 뉴델리, 포나"}
};
cities.Remove("UK"); // cities.Remove("UK"); 
//UK를 제거하기 전에 키를 확인하십시오. //제거 UK
runtime 예외: KeyNotFoundException를 발생시킵니다 // if(cities.ContainsKey("France")){
    UK를 제거하기 전에 키를 확인하십시오.
}
cities.Clear(); //모든 요소를 제거하기

딕셔너리 클래스 계층 구조

아래 그림은 일반화된 Dictionary 클래스의 계층 구조를 설명합니다.

dictionary 메서드와 속성에 대해 docs.microsoft.com에서 확인할 수 있습니다.