C# - 리스트 정렬 방법 (오름차순, 내림차순)

리스트의 요소들을 오름차순 또는 내림차순으로 정렬하는 방법을 소개합니다.

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]
Loading script...
codechachaCopyright ©2019 codechacha