본문 바로가기
Programming/C# & .NET

[C#] List 정렬 총정리(기본정렬, 여러개 정렬)

by Kor-IT 2022. 10. 18.
반응형

 

 

List를 정렬하는 방법을 총정리한다. 해당 정리로 다양한 정렬을 할 수 있고 예시를 통해 쉽고 빠르게 이해하도록 하자.

정렬은 기본적으로 Enumerable 클래스의 메서드를 사용한다. Linq 패턴을 따른다. 해당 정리는 .NET6 기준으로 정리했다.

 

 

class User
{
    public int idx { get; set; }
    public string name { get; set; }
    public int age { get; set; }
}

User 클래스를 가지고 List 를 생성하여 진행할 것이다.

 

 

public static void Main(string[] args)
{
    List<User> users = new List<User>()
    {
        new User() { idx = 1, name = "김씨", age = 30 }, 
        new User() { idx = 2, name = "이씨", age = 50 }, 
        new User() { idx = 3, name = "박씨", age = 20 }
    };

    foreach(User user in users)
    {
        Console.WriteLine($"idx : {user.idx}, name : {user.name}, age : {user.age}");
    }
}
[출력]
idx : 1, name : 김씨, age : 30
idx : 2, name : 이씨, age : 50
idx : 3, name : 박씨, age : 20

List에 User 클래스 3개를 넣어 출력한 결과이다. 기본적으로 아무것도 건들지 않았기 때문에 넣은 순서대로 나오고 있다.

 

 

OrderBy()

네임스페이스 : System.Linq

지정한 시퀀스의 요소를 오름차순으로 정렬한다.

 

Enumerable.OrderBy 메서드 (System.Linq)

시퀀스의 요소를 오름차순으로 정렬합니다.

learn.microsoft.com

 

foreach (User user in users.OrderBy(x => x.age))
{
    Console.WriteLine($"idx : {user.idx}, name : {user.name}, age : {user.age}");
}
[출력]
idx : 3, name : 박씨, age : 20
idx : 1, name : 김씨, age : 30
idx : 2, name : 이씨, age : 50

OrderBy() 메서드를 이용하여 age 오름차순으로 정렬한 것이다. 

 

 

OrderByDescending()

네임스페이스 : System.Linq

지정한 시퀀스의 요소를 내림차순으로 정렬한다.

 

Enumerable.OrderByDescending 메서드 (System.Linq)

시퀀스의 요소를 내림차순으로 정렬합니다.

learn.microsoft.com

 

foreach (User user in users.OrderByDescending(x => x.age))
{
    Console.WriteLine($"idx : {user.idx}, name : {user.name}, age : {user.age}");
}
[출력]
idx : 2, name : 이씨, age : 50
idx : 1, name : 김씨, age : 30
idx : 3, name : 박씨, age : 20

OrderByDescending() 메서드를 이용하여 age 내림차순으로 정렬한 것이다.

 

 

ThenBy(), ThenByDescending() 을 배우기 전 추가적으로 List에 User 클래스를 추가한다.

List<User> users = new List<User>()
{
    new User() { idx = 6, name = "강씨", age = 20 },
    new User() { idx = 5, name = "정씨", age = 50 },
    new User() { idx = 1, name = "김씨", age = 30 }, 
    new User() { idx = 2, name = "이씨", age = 50 }, 
    new User() { idx = 3, name = "박씨", age = 20 },
    new User() { idx = 4, name = "최씨", age = 30 }
};

데이터 idx 의 필드를 섞어서 등록한다. 이유는 메서드가 정확하게 작동하는지 판별하기 위함이다.

 

ThenBy()

네임스페이스 : System.Linq

시퀀스의 요소를 오름차순으로 다시 정렬한다. 추가적인 오름차순 정렬이 필요한경우 사용한다.

 

Enumerable.ThenBy 메서드 (System.Linq)

시퀀스의 요소를 오름차순으로 다시 정렬합니다.

learn.microsoft.com

 

foreach (User user in users.OrderBy(x => x.age).ThenBy(y => y.idx))
{
    Console.WriteLine($"idx : {user.idx}, name : {user.name}, age : {user.age}");
}
[출력]
idx : 3, name : 박씨, age : 20
idx : 6, name : 강씨, age : 20
idx : 1, name : 김씨, age : 30
idx : 4, name : 최씨, age : 30
idx : 2, name : 이씨, age : 50
idx : 5, name : 정씨, age : 50

먼저 age 필드 오름차순 한 뒤 idx 필드를 오름차순 한 결과이다.

 

 

ThenByDescending()

네임스페이스 : System.Linq

시퀀스의 요소를 내림차순으로 다시 정렬한다. 추가적인 내림차순 정렬이 필요한 경우 사용한다.

 

Enumerable.ThenByDescending 메서드 (System.Linq)

시퀀스의 요소를 내림차순으로 다시 정렬합니다.

learn.microsoft.com

 

foreach (User user in users.OrderBy(x => x.age).ThenByDescending(y => y.idx))
{
    Console.WriteLine($"idx : {user.idx}, name : {user.name}, age : {user.age}");
}
[출력]
idx : 6, name : 강씨, age : 20
idx : 3, name : 박씨, age : 20
idx : 4, name : 최씨, age : 30
idx : 1, name : 김씨, age : 30
idx : 5, name : 정씨, age : 50
idx : 2, name : 이씨, age : 50

age 필드가 오름차순 한 뒤 idx 필드를 내림차순 한 결과이다. 

 

추가적인 자세한 내용은 MS Docs 링크들을 달아두었다. 해당 링크를 통해 자세한 정보를 확인 할 수 있다.

 

반응형

'Programming > C# & .NET' 카테고리의 다른 글

[C#] switch 식  (1) 2022.12.02
[C#] 확장메서드 (Extension Method)  (1) 2022.10.28
[C#] JsonConvert null 해결방법  (1) 2022.10.13
[C#] Json 직렬화/역직렬화 속성 제외하는 방법  (1) 2022.09.14
[C#] lock 문 사용법  (1) 2022.08.03

댓글