C#에서 Dictionary(딕셔너리)는 키(Key)와 값(Value)의 쌍으로 데이터를 저장하는 대표적인 컬렉션입니다. 그런데 실무에서는 저장된 데이터를 값 기준으로 오름차순 또는 내림차순 정렬해야 하는 경우가 자주 발생합니다.
이번 글에서는 LINQ의 orderby 절을 활용하여 Dictionary를 값 기준으로 손쉽게 정렬하는 방법을 단계별로 알아보겠습니다.
1단계: Dictionary 생성하기
먼저 문자열 키와 정수 값을 가지는 Dictionary를 생성합니다.
var d = new Dictionary<string, int>(5);
2단계: 키와 값 추가하기
생성한 Dictionary에 Add() 메서드를 사용해 키와 값 쌍을 추가합니다.
// 키와 값 추가
d.Add("car", 25);
d.Add("bus", 28);
d.Add("motorbike", 17);3단계: orderby로 값 기준 정렬하기
LINQ 쿼리 구문의 orderby 절을 사용하면 값(Value)을 기준으로 정렬할 수 있습니다.
var val = from ele in d
orderby ele.Value ascending
select ele;위 코드에서 ascending은 오름차순 정렬을 의미합니다. 만약 내림차순으로 정렬하고 싶다면 descending으로 변경하면 됩니다.
// 내림차순 정렬 예시
var valDesc = from ele in d
orderby ele.Value descending
select ele;4단계: 정렬된 결과 출력하기
foreach 반복문과 KeyValuePair를 사용하여 정렬된 결과를 화면에 출력합니다.
foreach (KeyValuePair<string, int> ele in val) {
Console.WriteLine("{0} = {1}", ele.Key, ele.Value);
}전체 예제 코드
지금까지의 과정을 하나의 완성된 프로그램으로 정리하면 다음과 같습니다.
using System;
using System.Collections.Generic;
using System.Linq;
class Program {
static void Main() {
var d = new Dictionary<string, int>(5);
// 키와 값 추가
d.Add("car", 25);
d.Add("bus", 28);
d.Add("motorbike", 17);
// 값 기준 오름차순 정렬
var val = from ele in d
orderby ele.Value ascending
select ele;
// 결과 출력
foreach (KeyValuePair<string, int> ele in val) {
Console.WriteLine("{0} = {1}", ele.Key, ele.Value);
}
}
}실행 결과
motorbike = 17 car = 25 bus = 28
마무리
C#에서 Dictionary를 값 기준으로 정렬하는 것은 LINQ의 orderby 절만 있으면 매우 간단합니다. ascending과 descending 키워드를 활용하면 원하는 방향으로 자유롭게 정렬할 수 있으며, 필요에 따라 ele.Key를 사용해 키 기준 정렬도 가능합니다. 이 방법은 랭킹 집계, 통계 처리 등 값의 크기 순서가 중요한 다양한 상황에서 유용하게 활용될 수 있습니다.