C#의 orderby 키워드는 LINQ 쿼리 식에서 컬렉션의 요소를 특정 기준에 따라 오름차순(ascending) 또는 내림차순(descending)으로 정렬할 때 사용합니다. 별도의 키워드 없이 orderby만 작성하면 기본값인 오름차순으로 정렬되며, 뒤에 descending 키워드를 붙이면 내림차순으로 정렬됩니다.
정렬 대상 리스트 만들기
먼저 정렬할 문자열 리스트를 준비합니다.
List<string> myList = new List<string>();
myList.Add("truck");
myList.Add("bus");
myList.Add("bicycle");
myList.Add("motorbike");
내림차순으로 정렬하는 방법
문자열의 길이(Length)를 기준으로 내림차순 정렬하려면 다음과 같이 descending 키워드를 추가합니다.
myLen = from element in myList orderby element.Length descending select element;
전체 예제 코드
아래는 하나의 리스트를 오름차순과 내림차순으로 각각 정렬해 출력하는 완전한 C# 프로그램입니다.
using System;
using System.Collections.Generic;
using System.Linq;
class Demo {
static void Main() {
List<string> myList = new List<string>();
myList.Add("truck");
myList.Add("bus");
myList.Add("bicycle");
myList.Add("motorbike");
var myLen = from element in myList
orderby element.Length
select element;
Console.WriteLine("Ascending order...");
foreach (string str in myLen) {
Console.WriteLine(str);
}
myLen = from element in myList
orderby element.Length descending
select element;
Console.WriteLine("Descending order...");
foreach (string str in myLen) {
Console.WriteLine(str);
}
}
}
실행 결과
Ascending order... bus truck bicycle motorbike Descending order... motorbike bicycle truck bus
핵심 정리
orderby만 사용하면 오름차순으로 정렬됩니다.orderby ... descending형태로 작성하면 내림차순으로 정렬됩니다.- 위 예제에서는 문자열 자체가 아니라
element.Length, 즉 문자열 길이를 기준으로 정렬했습니다. - LINQ의 정렬은 안정적(stable)이므로 기준 값이 같은 요소들은 원래 순서가 그대로 유지됩니다.
- 메서드 체인 방식을 선호한다면
myList.OrderBy(x => x.Length)또는myList.OrderByDescending(x => x.Length)로 동일한 결과를 얻을 수 있습니다.