반응형
C# List Sort()로 정렬해 보자
- Comparison<> 객체로 정렬
- 무명 메서드로 정렬
- 람다로 정렬
- 번외 - OrderBy(), OrderByDescending() 함수로 정렬
Comparison<> 객체를 이용하여 정렬하기
구글에서 가볍게 검색했을 때 나왔던 방식은 Comparison을 사용하는 방법이다.
하지만 뭔가 가독성이 떨어지는 느낌이다.
public class Program
{
static void Main(string[] args)
{
int start = 10;
int end = 3;
List<int> list = new List<int>();
for (int i = end; i <= start; i++)
{
list.Add(i);
}
Comparison<int> comparison = new Comparison<int>(CompareIntMethod);
list.Sort(comparison);
foreach(var i in list)
{
Console.WriteLine(i);
}
Console.WriteLine();
}
private static int CompareIntMethod(int a, int b)
{
return b.CompareTo(a);
}
}
별도의 CompareIntMethod를 만들어서 Comparison 객체를 생성 시 넣어서 사용하였다.
public class Program
{
static void Main(string[] args)
{
int start = 10;
int end = 3;
List<int> list = new List<int>();
for (int i = end; i <= start; i++)
{
list.Add(i);
}
list.Sort(new Comparison<int>((n1, n2) => n2.CompareTo(n1)));
foreach(var i in list)
{
Console.WriteLine(i);
}
Console.WriteLine();
}
}
Comparison 객체 생성 시에 람다로 초기화한 방법
무명 메서드(Anonymous method)를 이용해서 정렬
public class Program
{
static void Main(string[] args)
{
int start = 10;
int end = 3;
List<int> list = new List<int>();
for (int i = end; i <= start; i++)
{
list.Add(i);
}
list.Sort(delegate (int a, int b) { return a.CompareTo(b); });
foreach(var i in list)
{
Console.WriteLine(i);
}
Console.WriteLine();
}
}
람다(Lambda) 이용해서 정렬하기
람다를 이용하면 코드가 한결 간결해져서 개인적으로 가장 선호한다. 하지만 의식적으로 사용하는 게 아니라서 코드 작성 시에 람다를 사용하지 않게 돼서 의도적으로 자주 사용하려고 노력 중이다.
public class Program
{
static void Main(string[] args)
{
int start = 10;
int end = 3;
List<int> list = new List<int>();
for (int i = end; i <= start; i++)
{
list.Add(i);
}
list.Sort((int a, int b) => { return a.CompareTo(b); }); // 람다문(Lambda Statement)
//list.Sort((a, b) => a.CompareTo(b)); 람다식(Lambda Expression)
foreach(var i in list)
{
Console.WriteLine(i);
}
Console.WriteLine();
}
}
번외 - OrderBy(), OrderByDescending 함수로 정렬
OrderBy() 메서드로 정렬하면 명확하게 오름차순인지 내림차순인지 명시적으로 보이지만 별도의 객체로 반환받아야 한다는 제약사항이 있어서 선호하지 않는 방식이다.
var newList = list.orderByDescending(x => x); (newList로 반환받아서 사용해야 함.)
public class Program
{
static void Main(string[] args)
{
int start = 10;
int end = 3;
List<int> list = new List<int>();
for (int i = end; i <= start; i++)
{
list.Add(i);
}
var newList = list.OrderByDescending(x => x);
foreach(var i in newList)
{
Console.WriteLine(i);
}
Console.WriteLine();
}
}
함께 읽으면 좋은 글
'프로그래밍 > C#' 카테고리의 다른 글
C# String은 참조 타입(Reference type)이면서 불변(Immutable)하다. (1) | 2024.01.10 |
---|---|
BitConverter.ToInt16 메서드에 대해서 (1) | 2024.01.08 |
C# 8 : using 선언 (0) | 2023.11.10 |
Json 작성 시 JavaScriptEncoder.UnsafeRelaxedJsonEscaping 옵션에 대해서 (1) | 2023.11.09 |
C# IDisposable에 대해서 (1) | 2023.11.03 |
댓글