■ 개념
○ 개념
- C#의 Dictionary 클래스는 키-값 쌍을 저장하고 관리하는 자료 구조
- Dictionary는 데이터의 키-값 매핑이 필요한 다양한 상황에서 빠르고 효율적인 방법을 제공
- 공식사이트
○ 특징
- 키-값 쌍 저장: 각 키는 고유해야 하며, 각 키는 하나의 값에 매핑됨
- 빠른 검색 속도: 해시 테이블을 기반으로 하여 키를 통해 값을 빠르게 검색할 수 있음
- 유연한 타입 지정: 키와 값의 타입을 제네릭으로 지정하여 다양한 데이터를 저장 가능
Dictionary<int, string> example = new Dictionary<int, string>();
○ 주요 구성 요소
- 키 (Key)
- 고유해야 하며 중복을 허용하지 않음
- 해시 값을 기반으로 검색됨
- 값 (Value)
○ 주요 메서드와 속성
- 메서드:
- Add(TKey key, TValue value): 새로운 키-값 쌍을 추가
- Remove(TKey key): 특정 키를 제거
- TryGetValue(TKey key, out TValue value): 키를 검색하고 값 반환 시 예외를 방지
- 속성:
- Count: Dictionary에 저장된 항목 수
- Keys: 모든 키 반환
- Values: 모든 값 반환
- 예제코드
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
// Dictionary 선언
Dictionary<string, int> fruitPrices = new Dictionary<string, int>
{
{ "Apple", 100 },
{ "Banana", 80 }
};
// 데이터 추가
fruitPrices["Cherry"] = 120;
// 데이터 검색
if (fruitPrices.ContainsKey("Apple"))
{
Console.WriteLine($"Apple의 가격은 {fruitPrices["Apple"]}원입니다.");
}
// 데이터 삭제
fruitPrices.Remove("Banana");
// 데이터 순회
foreach (var item in fruitPrices)
{
Console.WriteLine($"과일: {item.Key}, 가격: {item.Value}");
}
}
}
○ Dictionary와 유사 자료 구조 비교
○ 주의사항
- 키 중복 금지: 중복 키를 추가하려 하면 예외가 발생합니다.
- Null 키: 키는 null이 될 수 없지만, 값은 null 허용.
- TryGetValue 사용 권장: 키가 존재하지 않을 때 예외를 방지하려면 TryGetValue 사용.
■ 사용법
○ 생성
Dictionary<TKey, TValue>
: 키와 값을 각각 타입으로 정의
Dictionary<int, string> dict = new Dictionary<int, string>();
○ 주요 메서드
○ 속성
○ 반복문 처리
- Dictionary는 foreach를 사용하여 순회할 수 있음
foreach (KeyValuePair<int, string> pair in dict)
{
Console.WriteLine($"Key: {pair.Key}, Value: {pair.Value}");
}
○ 기타 사용법
- 인덱서로 접근:
- 키를 사용하여 직접 값을 읽거나 설정할 수 있음
dict[1] = "Banana"; // 키 1에 해당하는 값을 설정
Console.WriteLine(dict[1]); // 출력: Banana
- 예외 처리:
- 키가 없는 경우 값을 설정하려 하면 KeyNotFoundException이 발생함
- TryGetValue를 사용하여 예외를 방지할 수 있음
○ 사용 예시
Dictionary<string, int> fruitPrices = new Dictionary<string, int>
{
{ "Apple", 100 },
{ "Banana", 80 }
};
// 데이터 추가
fruitPrices["Cherry"] = 120;
// 데이터 확인
if (fruitPrices.ContainsKey("Apple"))
{
Console.WriteLine($"Apple의 가격: {fruitPrices["Apple"]}");
}
// 데이터 삭제
fruitPrices.Remove("Banana");