Sort list

C#언에서 List로 소팅 하기는 쉽다.
어려운 자료구조나 알고리즘에 대해서 알필요가 없다.
그래서 설명 보다는 간단한 예제로 설명을 하겠다.

List의 아이템으로 사용할 클래스가 있다.

    public class Player
    {
        public string Name { get; set; }
        public int Total { get; set; }

        public Player(string name, int total)
        {
            Name = name;
            Total = total;
        }
    }

List를 생성하고 아이템을 리스트에 추가한다.

            List<Player> list = new List<Player>();
            list.Add(new Player("John", 100));
            list.Add(new Player("Smith", 120));
            list.Add(new Player("Cait", 97));
            list.Add(new Player("Irene", 100));
            list.Add(new Player("Ben", 100));
            list.Add(new Player("Deniel", 88));

아래 예는 리스트를 오름차순으로 정렬하고 있다.

            list.Sort(delegate(Player x, Player y)
            {
                return x.Total.CompareTo(y.Total);
            });

아래 예는 리스트를 내림차순으로 정렬하고 있다.

            list.Sort(delegate(Player x, Player y)
            {
                return y.Total.CompareTo(x.Total);
            });

두개 변수로 정렬한다.

            list.Sort(delegate(Player x, Player y)
            {
                int a = y.Total.CompareTo(x.Total);

                if (a == 0)
                    a = x.Name.CompareTo(y.Name);

                return a;
            });

전체 소스

using System;
using System.Collections.Generic;
using System.Text;

namespace csharpTest
{
    public class Player
    {
        public string Name { get; set; }
        public int Total { get; set; }

        public Player(string name, int total)
        {
            Name = name;
            Total = total;
        }
    }

    class Test
    {
        public Test()
        {
            List<Player> list = new List<Player>();
            list.Add(new Player("John", 100));
            list.Add(new Player("Smith", 120));
            list.Add(new Player("Cait", 97));
            list.Add(new Player("Irene", 100));
            list.Add(new Player("Ben", 100));
            list.Add(new Player("Deniel", 88));

            list.Sort(delegate(Player x, Player y)
            {
                return x.Total.CompareTo(y.Total);
            });

            Console.Write("<<total ascending sort>>\n");
            list.ForEach(item => Console.Write("{0}\t", item.Total));
           
            list.Sort(delegate(Player x, Player y)
            {
                return y.Total.CompareTo(x.Total);
            });

            Console.Write("\n\n<<total descending sort>>\n");
            list.ForEach(item => Console.Write("{0}\t", item.Total));
           
            list.Sort(delegate(Player x, Player y)
            {
                int a = y.Total.CompareTo(x.Total);

                if (a == 0)
                    a = x.Name.CompareTo(y.Name);

                return a;
            });

            Console.Write("\n\n<<name and total sort>>\n\n");
            list.ForEach(item => Console.Write("{0}, {1}\n", item.Name, item.Total));

            Console.Write("\n");
            Console.ReadKey();
        }
    }
}

실행 결과

<<total ascending sort>>
88      97      100     100     100     120

<<total descending sort>>
120     100     100     100     97      88

<<name and total sort>>

Smith, 120
Ben, 100
Irene, 100
John, 100
Cait, 97
Deniel, 88