C#

(C#) Linq, 구조체(struct), List<T> 응용: 나이 순으로 정렬하기

코딩ABC 2023. 4. 24. 06:35
반응형

다음과 같은 문제를 생각해 보겠습니다.

10명의 사람 정보에는 이름과 나이가 있습니다.

일반적인 배열을 사용한다고 가정해 보면 다음과 같이 정의할 수 있습니다.

사람 정보

 

이름은 문자열(string)이고, 나이는 정수(int) 형식입니다.

이 데이터를 배열을 이용해서 나이순으로 정렬해서 출력하는 것을 생각해 보십시오.

C# 에서 제공하는 Array.Sort() 메서드를 사용할 수 없습니다. 아마  버블 정렬(bubble sort) 또는 선택 정렬(selection sort) 등의 알고리즘으로 복잡하게 표현을 해야 할 수 있습니다.

 

이 경우는 struct로 이름과 나이를 한 개의 자료형으로 묶고, Linq를 이용해서 쉽게 표현할 수 있습니다.

 

사람(Person)을 표현하는 구조체를 다음과 같이 선언합니다.

    internal struct Person   // 구조체
    {
        public string Name; // 이름
        public int Age;     // 나이
   
        public Person(string name, int age) 
        { 
            Name = name; 
            Age = age; 
        }
    }

 

위에서 선언한 구조체를 이용해서 10명의 사람을 생성하고, Linq를 이용해서 나이순으로 정렬하는 코드는 다음과 같습니다.

       private void button1_Click(object sender, EventArgs e)
        {
            List<Person> list = new List<Person>();
            list.Add(new Person("이순신", 32));
            list.Add(new Person("홍길동", 42));
            list.Add(new Person("왕건", 33));
            list.Add(new Person("설현", 27));
            list.Add(new Person("정철수", 40));
            list.Add(new Person("유치원", 7));
            list.Add(new Person("강수지", 25));
            list.Add(new Person("이만원", 19));
            list.Add(new Person("한빛나라", 20));
            list.Add(new Person("안나경", 23));

            var result = from p in list
                         orderby p.Age     // 나이를 오름차순으로 정렬
                         select p;

            foreach (Person r in result)
            {
                listBox1.Items.Add(r.Name + "\t" + r.Age);
            }
        }

 

Linq: 나이순 정렬

 

반응형