Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 ThenBy() 메서드로 배열 요소 정렬하기

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()를 함께 사용하면 여러 조건을 조합한 유연한 정렬 로직을 손쉽게 구현할 수 있습니다.