Unity/수업내용(C#)

[3.23] List.Sort(delegate)를 이용한 인벤토리 정렬

ljw4104 2021. 3. 23. 16:20

메이플스토리 상, 정렬버튼이 있긴 있는데 동작이 지멋대로 동작하는 경우가 많아서 그냥 정렬을 내 맘대로 했다.

정렬순서는 데미지->아이템등급->글자 수->스펠링 순으로 내림차순 정렬하였다.

using System;
using System.Collections.Generic;

namespace Study09
{
    public class App
    {
        public App()
        {
            int num = 0;
            List<Item> inventory = new List<Item>();
            inventory.Add(new Item(++num, "목검", 27, "두손검", eGrade.RARE));
            inventory.Add(new Item(++num, "왕푸", 50, "두손검", eGrade.EPIC));
            inventory.Add(new Item(++num, "라이온하트 리스트레인트", 137, "튜너", eGrade.EPIC));
            inventory.Add(new Item(++num, "제네시스 소울슈터", 255, "소울슈터", eGrade.LEGENDARY));
            inventory.Add(new Item(++num, "골든 아룬드", 85, "활", eGrade.EPIC));
            inventory.Add(new Item(++num, "다크 아룬드", 85, "활", eGrade.RARE));
            inventory.Add(new Item(++num, "네크로 매직 건틀렛", 137, "매직 건틀렛", eGrade.EPIC));

            foreach (var item in inventory)
            {
                Console.WriteLine(item);
            }

            Console.WriteLine("=============================");
            inventory.Sort(CompareTo);

            foreach (var item in inventory)
            {
                Console.WriteLine(item);
            }
        }

        private int CompareTo(Item item1, Item item2)
        {
            int result = 0;
            if (item1 == null && item2 == null)
            {
                return 0;
            }
            else
            {
                result = item1.Damage.CompareTo(item2.Damage);
                if (result != 0)
                {
                    //오름차순 할려면 *-1 빼면된다.
                    return result * -1;
                }

                int aGrade = (int)item1.Grade;
                int bGrade = (int)item2.Grade;
                result = aGrade.CompareTo(bGrade);
                if (result != 0)
                {
                    //오름차순 할려면 *-1 빼면된다.
                    return result * -1;
                }

                result = item1.Name.Length.CompareTo(item2.Name.Length);
                if (result != 0)
                {
                    //오름차순 할려면 *-1 빼면된다.
                    return result * -1;
                }

                return item1.Category.CompareTo(item2.Category) * -1;
            }
        }
    }
}