C#에서 배열 요소를 정렬할 때는 LINQ의 ThenBy() 메서드를 활용할 수 있습니다. ThenBy()는 1차 정렬 기준(OrderBy)의 결과가 같은 요소들에 대해 추가적인 정렬 조건을 적용하는 메서드로, 다단계 정렬이 필요할 때 매우 유용합니다.
예를 들어 다음과 같은 문자열 배열이 있다고 가정해 보겠습니다.
string[] str = { "Sandler", "Jack", "Tom", "Matt", "Henry", "Johnny" };이제 람다 식(Lambda Expression)을 사용해 ThenBy() 메서드 내부에 정렬 조건을 설정하여, 문자열을 문자 개수(길이)를 기준으로 1차 정렬하고, 길이가 같은 경우에는 알파벳 순서로 2차 정렬해 보겠습니다.
IEnumerable<string> res = str.AsQueryable().OrderBy(alp => alp.Length).ThenBy(alp => alp);
위 코드에서 OrderBy(alp => alp.Length)는 문자열의 길이를 기준으로 먼저 오름차순 정렬을 수행하고, 이어지는 ThenBy(alp => alp)는 길이가 동일한 문자열들을 사전순으로 정렬합니다.
전체 예제
다음은 ThenBy() 메서드를 사용해 배열 요소를 정렬하는 전체 코드입니다.
using System;
using System.Linq;
using System.Collections.Generic;
public class Demo {
public static void Main() {
string[] str = { "Sandler", "Jack", "Tom", "Matt", "Henry", "Johnny" };
IEnumerable<string> res = str.AsQueryable()
.OrderBy(alp => alp.Length)
.ThenBy(alp => alp);
foreach (string arr in res)
Console.WriteLine(arr);
}
}실행 결과
Tom Jack Matt Henry Johnny Sandler
결과 분석
출력 결과를 살펴보면 다음과 같은 정렬 규칙이 적용된 것을 확인할 수 있습니다.
- Tom — 3글자로 가장 짧아 첫 번째
- Jack, Matt — 둘 다 4글자이므로 알파벳 순으로 정렬
- Henry — 5글자
- Johnny — 6글자
- Sandler — 7글자로 가장 길어 마지막
이처럼 OrderBy()와 ThenBy()를 함께 사용하면 여러 조건을 조합한 유연한 정렬 로직을 손쉽게 구현할 수 있습니다.