IComparable.CompareTo

IComparable 인터페이스는 이름대로 비교될 수 있는 객체를 만들때 사용한다.
비교 규칙을 만들기 위해선  CompareTo 메소드를 구현해야 하고 작은값을 표현할때 -1, 같을때 0, 클때 1을 반환하면 OK

이렇게 만들어진 객체는 Sort 단어가 들어간 SortedList 라던가 Array.Sort 메소드를 통해 정렬된다.
아래처럼 Id, Name 프로퍼티를 포함한 Student 클래스가 있을때 정렬 조건을 Name.Length로 설정해봤다.

class Student : IComparable
{
	public int Id { get; set; }
	public string Name { get; set; }

	public int CompareTo(Student other)
	{
		if (Name.Length < other.Name.Length) return -1;
		if (Name.Length == other.Name.Length) return 0;
		return 1;
	}
}

그리고 Main 함수에서 아래처럼 배열형태로 Student를 구성하고 Array.Sort메소드를 실행해보니 Student.CompareTo에 적용했던 규칙이 제대로 먹은거 같다.

var students = new Student[4]
{
    new Student{ Id=1, Name = "AB"},
    new Student{ Id=2, Name = "ABCDE"},
    new Student{ Id=3, Name = "ABCDEFGHIJK"},
    new Student{ Id=4, Name = "A"}
};

foreach (var s in students)
	Console.Write("({0}:{1})t", s.Id, s.Name);

Array.Sort(students);

Console.WriteLine("");
foreach (var s in students)
	Console.Write("({0}:{1})t", s.Id, s.Name);

IComparable Interface
Array.Sort Method
SortedList Class

Advertisements
%d bloggers like this: