HOWTO · Csharp

C#에서 알파벳 순서로 목록 정렬

이 문서에서는 C#에서 목록을 알파벳순으로 정렬하는 방법을 보여줍니다.

이 페이지의 내용

C#에서 목록을 알파벳순으로 정렬하려면 List<T>에 Sort()를 호출합니다. 문자열 목록은 기본 비교자를 사용해 값을 정렬합니다. 객체 목록은 정렬 기준으로 삼을 속성을 읽는 비교를 전달합니다. Sort()는 기존 목록의 순서를 바꾸므로 정렬한 뒤 같은 목록을 출력할 수 있습니다.

문자열 목록을 알파벳순으로 정렬하기

List<string>에는 기본 비교자가 있으므로 문자열을 정렬할 때 별도의 비교 함수가 필요하지 않습니다. 이 비교자는 현재 문화권의 문자열 비교 동작을 따릅니다. 일반적인 영어 단어는 아래 예제처럼 알파벳순으로 정렬됩니다. 문화권별 규칙에 따라 악센트가 있는 문자나 문화권에 민감한 문자의 상대적 순서는 달라질 수 있습니다. 애플리케이션에서 문화권에 좌우되지 않는 순서가 필요하다면 명시적인 비교 방식을 사용하세요.

다음 예제를 실행해 보세요. 예제의 영어 이름은 코드와 출력에 그대로 표시됩니다.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var words = new List<string> { "Pear", "Apple", "Orange" };
        words.Sort();

        foreach (string word in words)
        {
            Console.WriteLine(word);
        }
    }
}

출력되는 이름은 Apple, Orange, Pear이며, 각 이름은 한 줄에 표시됩니다. 이 호출은 words를 제자리에서 정렬합니다. 변수는 같은 목록을 계속 가리키지만 목록의 순서는 바뀝니다. 이후 코드에서 정렬된 시퀀스를 사용해야 할 때 유용합니다. 원래 순서를 유지해야 한다면 Sort()를 호출하기 전에 목록을 복사하세요.

선택한 속성을 기준으로 객체 정렬하기

객체 목록을 정렬할 때는 Sort()에 전달하는 비교 대리자에서 기준 속성을 선택합니다. 대리자는 목록의 두 요소를 받아 첫 번째 요소가 앞에 와야 하면 음수, 두 키가 같으면 0, 첫 번째 요소가 뒤에 와야 하면 양수를 반환합니다. 여기서는 StringComparison.Ordinal을 사용해 현재 문화권의 언어 규칙을 적용하지 않고 UTF-16 코드 단위를 기준으로 이름을 일관된 서수 순서로 정렬합니다. 특정 독자를 위한 표시 순서가 필요하다면 문화권을 고려하는 비교자를 선택하세요.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

using System;
using System.Collections.Generic;

class Person
{
    public string Name { get; }

    public Person(string name) => Name = name;
}

class Program
{
    static void Main()
    {
        var people = new List<Person>
        {
            new Person("Maya"),
            new Person("Alex"),
            new Person("Jordan")
        };

        people.Sort((left, right) =>
            string.Compare(left.Name, right.Name, StringComparison.Ordinal));

        foreach (Person person in people)
        {
            Console.WriteLine(person.Name);
        }
    }
}

대리자에 전달되는 두 값은 모두 Person 객체지만, 비교에는 각 객체의 Name 값만 사용합니다. 다른 종류의 객체를 정렬하려면 Name을 정렬 기준이 되는 속성으로 바꾸고 해당 속성 형식에 알맞은 비교자를 사용하세요. 두 사람의 이름이 같으면 이 비교에서는 두 값을 같은 것으로 처리합니다. 작업에 보조 정렬 기준이 필요한 경우에만 동률 해소 기준을 추가하세요. 목록은 계속 List<Person> 형식이며, 요소를 새 컬렉션에 복사하는 대신 기존 목록 안에서 순서를 바꿉니다. 예제의 이름은 코드와 출력에 영어 그대로 표시됩니다.

정렬된 목록 출력하기

정렬 전후의 값을 출력하면 순서가 어떻게 바뀌는지 확인할 수 있습니다. 이 전체 예제는 이름 세 개로 시작해 원래 순서를 출력하고, 같은 목록을 정렬한 다음 새 순서를 출력합니다. foreach는 목록의 현재 순서대로 각 요소를 방문할 뿐 직접 정렬하지는 않습니다. 목록 순서를 바꾸는 것은 Sort() 호출입니다. 코드의 Before sorting: 및 After sorting: 레이블과 이름은 바이트 단위로 보존되므로 출력에서도 영어 그대로 표시됩니다.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var names = new List<string> { "Mina", "Eli", "Noah" };

        Console.WriteLine("Before sorting:");
        foreach (string name in names)
        {
            Console.WriteLine(name);
        }

        names.Sort();

        Console.WriteLine("After sorting:");
        foreach (string name in names)
        {
            Console.WriteLine(name);
        }
    }
}

첫 번째 반복문은 삽입 순서대로 값을 출력합니다. names.Sort()를 호출한 뒤 두 번째 반복문은 기본 문자열 비교자가 정한 순서대로 목록을 방문합니다. 콘솔 애플리케이션에서 결과를 확인하려면 Console.WriteLine 호출을 유지하세요. 다른 프로그램에서는 정렬된 목록을 다음 작업에 바로 전달할 수도 있습니다. 이 예제들은 두 가지 정렬 방식을 이해하는 데 필요한 가져오기, 속성, 설정만 사용합니다.