C#의 Dictionary 컬렉션은 키(Key)와 값(Value) 쌍으로 데이터를 저장하는 자료구조입니다. 키와 값은 각각 임의의 데이터 타입을 가질 수 있으며, Dictionary<TKey, TValue>는 System.Collections.Generic 네임스페이스에 포함되어 있습니다.
딕셔너리 순회의 기본 개념
딕셔너리를 반복(iterate)하는 가장 좋은 방법은 foreach 루프와 KeyValuePair<TKey, TValue>를 함께 사용하는 것입니다. 여기에 LINQ의 orderby 절을 활용하면 값을 기준으로 정렬하면서 순회할 수도 있습니다.
1. 딕셔너리 생성하기
먼저 문자열 키와 정수 값으로 이루어진 딕셔너리를 생성합니다.
var d = new Dictionary<string, int>(5);
2. 키와 값 추가하기
Add 메서드를 사용해 키와 값 쌍을 추가합니다.
// 키와 값 추가
d.Add("car", 25);
d.Add("bus", 28);
d.Add("motorbike", 17);3. orderby로 값 기준 정렬하기
LINQ의 orderby 절을 사용하면 딕셔너리의 요소를 값 기준으로 정렬할 수 있습니다. 아래 예제는 ascending(오름차순)으로 정렬합니다.
var val = from ele in d orderby ele.Value ascending select ele;
오름차순 대신 내림차순으로 정렬하고 싶다면 descending 키워드를 사용하면 됩니다.
4. foreach로 정렬된 값 출력하기
정렬된 결과를 foreach 루프로 순회하며 키와 값을 화면에 출력합니다.
foreach (KeyValuePair<string, int> ele in val) {
Console.WriteLine("{0} = {1}", ele.Key, ele.Value);
}실행 결과
motorbike = 17 car = 25 bus = 28
참고: 정렬 없이 단순 반복하기
정렬이 필요 없는 경우라면 다음과 같이 딕셔너리를 직접 foreach로 순회하는 것이 가장 간단하고 효율적인 방법입니다.
foreach (KeyValuePair<string, int> ele in d) {
Console.WriteLine("{0} = {1}", ele.Key, ele.Value);
}또한 C# 7.0 이상에서는 튜플 분해(deconstruction) 문법을 사용해 더욱 간결하게 작성할 수도 있습니다.
foreach (var (key, value) in d) {
Console.WriteLine($"{key} = {value}");
}정리하면, C#에서 딕셔너리를 반복하는 가장 좋은 방법은 foreach와 KeyValuePair를 사용하는 것이며, 정렬이 필요한 경우 LINQ의 orderby 절을 조합하면 깔끔하게 처리할 수 있습니다.