C#에서 KeyValuePair 컬렉션을 정렬하려면 Sort 메서드를 사용하면 됩니다. 람다 식과 함께 CompareTo() 메서드를 조합하면 Key 또는 Value를 기준으로 원하는 순서(오름차순/내림차순)대로 간단하게 정렬할 수 있습니다.
1. 컬렉션 생성 및 요소 추가
먼저 KeyValuePair 요소를 담을 List 컬렉션을 만들고 데이터를 추가합니다.
var myList = new List<KeyValuePair<int, int>>(); // 요소 추가 myList.Add(new KeyValuePair<int, int>(1, 20)); myList.Add(new KeyValuePair<int, int>(2, 15)); myList.Add(new KeyValuePair<int, int>(3, 35)); myList.Add(new KeyValuePair<int, int>(4, 50)); myList.Add(new KeyValuePair<int, int>(5, 25));
2. Sort() 메서드로 정렬하기
정렬을 수행하려면 Sort() 메서드를 호출합니다. 아래 코드에서는 CompareTo() 메서드로 Value 값을 비교하여 내림차순으로 정렬하고 있습니다.
myList.Sort((x, y) => (y.Value.CompareTo(x.Value)));
비교 순서에 따라 정렬 방향이 달라집니다. y.Value.CompareTo(x.Value)처럼 작성하면 내림차순이 되고, 반대로 x.Value.CompareTo(y.Value)로 작성하면 오름차순으로 정렬됩니다. Key를 기준으로 정렬하고 싶다면 Value 대신 Key 프로퍼티를 사용하면 됩니다.
전체 예제 코드
using System;
using System.Collections.Generic;
class Program {
static void Main() {
var myList = new List<KeyValuePair<int, int>>();
// 요소 추가
myList.Add(new KeyValuePair<int, int>(1, 20));
myList.Add(new KeyValuePair<int, int>(2, 15));
myList.Add(new KeyValuePair<int, int>(3, 35));
myList.Add(new KeyValuePair<int, int>(4, 50));
myList.Add(new KeyValuePair<int, int>(5, 25));
Console.WriteLine("정렬되지 않은 목록...");
foreach (var val in myList) {
Console.WriteLine(val);
}
// Value 기준 정렬
myList.Sort((x, y) => (y.Value.CompareTo(x.Value)));
Console.WriteLine("정렬된 목록...");
foreach (var val in myList) {
Console.WriteLine(val);
}
}
}실행 결과
정렬되지 않은 목록... [1, 20] [2, 15] [3, 35] [4, 50] [5, 25] 정렬된 목록... [4, 50] [3, 35] [5, 25] [1, 20] [2, 15]
실행 결과를 보면 Value 값(50, 35, 25, 20, 15)을 기준으로 내림차순 정렬된 것을 확인할 수 있습니다. 이처럼 Sort() 메서드와 람다 식만 활용하면 별도의 복잡한 구현 없이도 KeyValuePair 컬렉션을 원하는 기준으로 쉽게 정렬할 수 있습니다.