-
C# IComparable을 이용한 List정렬C# 2020. 8. 21. 14:46
List.Sort는 CompareTo메소드를 정의해야 정렬가능하다.
IComparable의 인터페이스 내부의 CompareTo 메소드를 정의해보자
public class Fact : IComparable { public string Name; public int Age; public string Gender; public int CompareTo(object obj) { Fact temp = (Fact)obj; return Age.CompareTo(temp.Age); //return Age.CompareTo(((Fact)obj).Age); } public override string ToString() { return string.Format($"[{Name},{Age},{Gender}]"); } }
IComparable이라는 인터페이스 내부의 CompareTo메소드를 Fact클래스 안에 정의한다. Age를 기준으로 정렬되게
static void Main(string[] args) { List<Fact> aList = new List<Fact>(); Fact temp = new Fact(); temp.Name = "그놈"; temp.Age = 23; temp.Gender = "남"; aList.Add(temp); temp = new Fact(); temp.Name = "그녀"; temp.Age = 19; temp.Gender = "여"; aList.Add(temp); temp = new Fact(); temp.Name = "그녀"; temp.Age = 40; temp.Gender = "여"; aList.Add(temp); temp = new Fact(); temp.Name = "그녀"; temp.Age = 35; temp.Gender = "여"; aList.Add(temp); foreach (var item in aList) { Console.WriteLine(item.ToString()); } //aList.Sort(); aList.Sort((x,y) => x.Age.CompareTo(y.Age)); foreach (var item in aList) { Console.WriteLine(item.ToString()); } }
//aList.Sort()로 클래스 리스트가 나이 순으로 정렬됨을 확인했다.
람다식을 이용한다면,
aList.Sort((x,y) => x.Age.CompareTo(y.Age));
위와 같이 x,y에 대하여 비교하면 된다.
x=this.Age y=(Fact)obj의 역할을 한다.
'C#' 카테고리의 다른 글
내가 쓰려고 만든 C# 윈폼 템플릿(콤보박스 데이터 바인딩) (0) 2020.09.15 내가 쓰려고 만든 C# 윈폼 템플릿 (SELECT) (0) 2020.09.15 C# 숫자야구 윈폼 (0) 2020.08.20 C# 윈폼 DateTimePicker와 Tab 컨트롤을 사용한 알람시계 (0) 2020.08.20 C# 윈폼 타이머를 이용한 스탑워치 (0) 2020.08.20