본문 바로가기
프로그래밍/C#

C# List Sort()를 사용해서 정렬하기

by bantomak 2023. 11. 23.

C# List Sort()로 정렬해 보자

  1. Comparison<> 객체로 정렬
  2. 무명 메서드로 정렬
  3. 람다로 정렬
  4. 번외 - 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# 무명 메서드(Anonymous Method)

무명 메서드(Anonymous method) C# 2.0에서부터 메서드를 미리 정의하지 않아도 되는 메서드명이 없는 무명 메서드(혹은 익명 메서드, Anonymous Method)를 지원하게 되었다. 만약 어떤 메서드가 일회용으로

jettstream.tistory.com

 

C# 람다(Lambda)에 대해서

람다의 형태 람다는 두 가지 형태 중 하나의 형태를 가집니다. 람다식 (Lambda Expression) (parameters) => expression // 람다식으로 작성시 return 문을 생략할 수 있습니다. 람다문 (Lambda Statement) (parameters) =>

jettstream.tistory.com

 

C# Linq - OrderBy()에 대해서

OrderBy()로 정렬하기 OrderBy()를 호출하면 해당하는 데이터를 기준으로 오름차순(Ascending) 정렬한다. 내림차순으로 정렬이 필요한 경우 내림차순(OrderByDescending)으로 메서드를 호출한다. ThenBy()를 추

jettstream.tistory.com

댓글