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
지정한 시퀀스의 요소를 오름차순으로 정렬한다.
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
지정한 시퀀스의 요소를 내림차순으로 정렬한다.
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
시퀀스의 요소를 오름차순으로 다시 정렬한다. 추가적인 오름차순 정렬이 필요한경우 사용한다.
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
시퀀스의 요소를 내림차순으로 다시 정렬한다. 추가적인 내림차순 정렬이 필요한 경우 사용한다.
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 |
댓글