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;
}
}
}
}