Dictionary<TKey, TValue>
Dictionary<TKey, TValue>는 C# 에서 가장 많이 쓰는 저장소 자료구조 ( Data Structure )이다.
자료구조 중에서 데이터를 Key 와 Value 의 쌍으로 저장하는 해시 테이블을 기반으로 하는 제네릭 컬렉션이다.
배열이나 리스트처럼 순서로 접근하는 방식이 아니라 고유한 키 ( Key )를 통해 값 ( Value )을 빠르게 조회할 수 있다.
| 상황 | Dictionary 적합 | 이유 |
| 특정 값을 이름 또는 ID 로 빠르게 찾기 | 적합하다 | O(1) 시간에 바로 접근 가능 |
| 키가 중복되면 안되는 경우 | 적합하다 | 딱 한 키에 한 값만 저장된다 |
| 순서가 중요할 때 | 적합하지 않다 | 삽입 순서를 보장하지 않는다 |
→ 배열처럼 인덱스로 찾는 게 아니라 , 키로 직접 접근하는 방식이다.
→ 키는 중복될 수 없고 , 값을 빠르게 찾거나 수정할 수 있다.
예시 :
- 몬스터의 ID → 체력
- 아이템 이름 → 아이템 정보
- 문자열 ("Player") → Player 객체
선언과 초기화
Dictionary<string, int> dict = new Dictionary<string, int>();
- Tkey → 키 타입 ( string , int , enum 등 )
- TValue → 값 타입 ( int , float , class 등 )
▼ 초기값을 설정할 수도 있다
Dictionary<string, int> dict = new Dictionary<string, int>()
{
{ "A", 100 },
{ "B", 95 },
{ "C", 60 }
};
▼ 요소 추가
dict.Add("D", 97); // Add 메서드로 추가한다
dict["E"] = 100; // 인덱서를 사용한 새 키를 추가한다
dict["A"] = 45; // 기존 키의 값을 수정한다
- 주의 : 동일한 키가 이미 존재하면 예외가 발생하므로 , AddTry( )를 사용할 수도 있다.
bool isAdded = dict.TryAdd("A", 80);
if (isAdded)
{
Console.WriteLine("성공적으로 추가");
}
else
{
Console.WriteLine("이미 해당 키가 존재");
}
▼ 값 조회하기
int hochanScore = dict["A"];
- 키가 존재하지 않을 경우 KeyNotFoundException 발생
- 안전하게 조회하려면 TryGetValue 를 사용
int value;
bool isfound = dict.TryGetValue("B", out value);
if (isfound)
{
Console.WriteLine(value);
}
▼ 요소 삭제하기
dict.Remove("C");
dict.Clear(); // 전체 삭제
▼ 존재 여부 확인하기
bool hasKey = dict.ContainsKey("A");
bool hasValue = dict.ContainsValue(100);
▼ Count 확인하기
int count = scores.Count;
▼ 전체 순회하기
foreach (KeyValuePair<string, int> pair in dict)
{
Console.WriteLine($"{pair.Key} : {pair.Value}");
}
- var 로 간단하게 작성 가능하다
foreach (var pair in dict)
{
Console.WriteLine(pair.Key + " / " + pair.Value);
}
- 키나 값만 순회도 가능하다
foreach (string key in dict.Keys) { }
foreach (int value in dict.Values) { }
정리
Dictionary 는 키로 값을 빠르게 찾아서 관리할 수 있는 자료구조이다
foreach 로 Key - Value 를 순회할 수 있다.
참고 자료
https://learn.microsoft.com/ko-kr/dotnet/api/system.collections.generic.dictionary-2?view=net-8.0
'⭐C Sharp > 15-1. 제네릭' 카테고리의 다른 글
| 제네릭 사용 예시 코드 (0) | 2025.10.02 |
|---|---|
| 제네릭 ( Generic ) (0) | 2025.09.27 |