리스트의 요소들을 오름차순 또는 내림차순으로 정렬하는 방법을 소개합니다.
1. List.Sort()를 이용한 방법
1.1 오름차순
List.Sort()
는 리스트의 요소들을 오름차순으로 정렬합니다.
원본 리스트의 순서가 변경됩니다.
using System;
namespace Example {
public class Program {
public static void Main(string[] args) {
List<int> list = new List<int>() {5, 1, 4, 3, 2};
list.Sort();
Console.WriteLine(string.Join(", ", list));
}
}
}
Output:
1, 2, 3, 4, 5
1.2 내림차순
List.Sort()
로 내림차순 정렬을 하고 싶다면, Comparison를 전달하여 내림차순으로 정렬하도록 구현해야 합니다.
Comparison
는 어떻게 리스트를 정렬할 것인지에 대한 구현이 있으며, 비교 순서를 아래와 같이 반대로 바꿔주면 내림차순으로 정렬됩니다.
using System;
namespace Example {
public class Program {
public static void Main(string[] args) {
List<int> list = new List<int>() {5, 1, 4, 3, 2};
list.Sort(new Comparison<int>((n1, n2) => n2.CompareTo(n1)));
Console.WriteLine(string.Join(", ", list));
}
}
}
Output:
5, 4, 3, 2, 1
2. List.OrderBy()를 이용한 방법
2.1 오름차순
List.OrderBy()
는 리스트의 요소가 오름차순으로 정렬된 Enumerable을 리턴합니다. 원본 리스트의 순서는 변경되지 않으며, ToList()
로 Enumerable을 List로 변경할 수 있습니다.
OrderBy()
에 전달되는 함수는 어떤 key로 요소들을 정렬할지 가리키는데, int 리스트에서는 int 자체를 key로 사용하면 되기 때문에 i => i
를 전달하면 됩니다.
using System;
namespace Example {
public class Program {
public static void Main(string[] args) {
List<int> list = new List<int>() {5, 1, 4, 3, 2};
List<int> newList = list.OrderBy(i => i).ToList();
Console.WriteLine(string.Join(", ", newList));
}
}
}
Output:
1, 2, 3, 4, 5
2.2 내림차순
List.OrderByDescending()
는 리스트를 내림차순으로 정렬합니다. 동작 방식은 OrderBy()
와 같습니다.
using System;
namespace Example {
public class Program {
public static void Main(string[] args) {
List<int> list = new List<int>() {5, 1, 4, 3, 2};
List<int> newList = list.OrderByDescending(i => i).ToList();
Console.WriteLine(string.Join(", ", newList));
}
}
}
Output:
5, 4, 3, 2, 1
3. Custom 클래스 객체의 리스트 정렬
아래는 기본 자료형 객체의 리스트가 아닌, 클래스 객체의 리스트를 정렬하는 예제입니다.
위에서 소개한 예제와 다를 것은 없지만, 아래 예제에서 리스트는 Person 객체들을 갖고 있으며, Person은 name과 age를 멤버 변수로 갖고 있습니다.
만약 age를 기준으로 리스트를 오름차순 정렬한다면, OrderBy(p => p.age)
로 age를 key로 정렬하도록 만드시면 됩니다.
using System;
namespace Example {
public class Person {
public string name;
public int age;
public Person(string name, int age) {
this.name = name;
this.age = age;
}
public override string ToString() {
return "[" + name + ", " + age + "]";
}
}
public class Program {
public static void Main(string[] args) {
List<Person> list = new List<Person>();
list.Add(new Person("John", 30));
list.Add(new Person("Patrick", 34));
list.Add(new Person("Doe", 22));
List<Person> newList = list.OrderBy(p => p.age).ToList();
Console.WriteLine(string.Join(", ", newList));
}
}
}
Output:
[Doe, 22], [John, 30], [Patrick, 34]
Related Posts
- C# 바이트(Byte) 배열을 문자열로 변환
- C# String.format() 함수 알아보기
- C# - foreach (Array, List, Dictionary)
- C# 프로퍼티(Property) Get/Set 함수
- C# - Dictionary에서 key, value 가져오기
- C# - Dictionary 순회, foreach, for 루프
- C# - Dictionary에서 key, value 삭제
- C# - Dictionary.add()로 데이터 추가
- C# - Dictionary 선언 및 초기화
- C# - 문자열을 Double, Float으로 변환
- C# - 문자열을 리스트로 변환
- C# - 두 날짜/시간 비교, DateTime.Compare()
- C# - 날짜 계산, DateTime 시간 더하기 빼기
- C# - 날짜 문자열을 DateTime으로 변환
- C# - Sleep, 몇 초간 지연시키기
- C# - Timestamp(millisecond)를 DateTime 객체로 변환
- C# - 현재 시간 가져오기, DateTime
- C# - 문자열 리스트를 문자열로 변환
- C# - 리스트 복사 (얕은 복사, 깊은 복사)
- C# - 2차원 리스트 선언 및 초기화
- C# - 리스트 선언 및 초기화
- C# - 리스트 길이, 크기 가져오기
- C# - 리스트 합계, 평균 계산
- C# - 리스트 요소 제거 (RemoveAt, RemoveAt, RemoveAll)
- C# - 리스트에서 빈 문자열, null 제거
- C# - 리스트 두개로 분리, n개로 나누기
- C# - 문자열 뒤집기, Reverse()
- C# - 2차원 배열 복사, Clone
- C# - 문자열 배열을 문자열로 변환
- C# - 2차원 배열 선언, 초기화 방법
- C# - 배열 길이, 2차원 배열 길이
- C# - 두개의 배열을 하나로 합치기
- C# - 배열 중복 요소 제거
- C# - 배열에서 특정 요소 제거
- C# - Int 배열 정렬 (오름차순, 내림차순)