IComparable 인터페이스를 이용한 객체의 정렬
C# 컬렉션은 대부분 Sort 메서드를 제공하는데 다음과 같이 IComparable 인터페이스를 구현해야 정상적으로 동작한다. ICompable 인터페이스에는 자신과 비교할 매개변수를 비교하여 결과를 반환하는 CompareTo 메서드를 만들도록 약속하고 있다. 매개변수 형식이 object 형식으로 되어 있으므로 프로그램 목적에 맞게 캐스팅하여 처리해야 한다.
C#의 System에 정의되어 있는 int, double, string 등의 기본 형식들은 ICompable 인터페이스를 기반으로 정의되어 있어서 이들 기본 형식을 보관한 컬렉션은 Sort 메서드를 이용하여 정렬할 수 있다. 사용자가 정의한 클래스나 구조체는 여러 필드나 속성을 포함할 수 있으므로 어떤 기준으로 정렬할 지를 사용자가 지정해야 한다.
ex)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _20200821_004
{
class Fact : IComparable
{
public string Name;
public int Age;
public string Gender;
public int CompareTo(Object obj)
{
return this.Age.CompareTo(((Fact)obj).Age);
}
public override string ToString()
{
return string.Format($"[{Name},{Age},{Gender}]");
}
}
class Program
{
static void Main(string[] args)
{
List<Fact> list = new List<Fact>();
Fact Temp = new Fact();
Temp.Name = "H1";
Temp.Age = 27;
Temp.Gender = "남";
list.Add(Temp);
Console.WriteLine(Temp);
Temp = new Fact();
Temp.Name = "H3";
Temp.Age = 22;
Temp.Gender = "여";
list.Add(Temp);
Console.WriteLine(Temp);
Temp = new Fact();
Temp.Name = "H2";
Temp.Age = 28;
Temp.Gender = "여";
list.Add(Temp);
Console.WriteLine(Temp);
Console.WriteLine(list[0]);
Console.WriteLine("==============Sort==============");
list.Sort();
foreach (Fact item in list)
{
Console.WriteLine(item);
}
}
}
}
'스마트팩토리 > C#' 카테고리의 다른 글
34. C# 파일 입출력 (0) | 2020.08.25 |
---|---|
32. List<T> 컬렉션 (0) | 2020.08.21 |
31. 숫자야구 만들기 (0) | 2020.08.20 |
30. Random 클래스 (0) | 2020.08.20 |
29. 익명타입(Anonymous Type) (0) | 2020.08.19 |