본문 바로가기

프로그래밍/C# 프로그래밍

IComparable, IComparer 비교정렬

int CompareTo(
	Object obj
)

정렬함수로써

리턴값이 0보다 크면 해당 인스턴스가 정렬에서 앞으로 오고, 작으면 그 반대이다.



C#에서 기본타입은 IComparable 를 상속받으며 CompareTo() 함수를 지원하고 있다.


public sealed class String : IConvertible, IComparable, IEnumerable, ICloneable, IComparable<String>, IEquatable<String>, IEnumerable<char>

{

public int CompareTo(String strB);

}


public struct Int32 : IFormattable, IConvertible, IComparable, IComparable<Int32>, IEquatable<Int32>

{

public Int32 CompareTo(Int32 value);

}



때문에 이런식으로 바로 비교함수를 호출할 수 있다.


int myCode;

...


myCode.CompareTo(guest.Code);


string형도 마찬가지이다.



늘 그렇듯 msdn의 예제로 소개를 하려고 했지만, 처음 배우는 입장에서 조금 난해하고

쓸데없는 코드가 많아 생략한다.



또한 IComparer 를 이용하여 정렬할때 

다음과 같은 방법을 사용하기도 한다.


public class ItemSort { public class TestGradeSort : IComparer<Item> {

public int Compare(Item x, Item y)     return x.grade.CompareTo(y.grade);

}

}



int형 grade를 가지고 있는 Item 리스트를 정렬할때, IComparer 를 상속받아

Compare함수를 만든후..




itemList.Sort(new ItemSort.TestGradeSort());


이런식으로 호출해주면 된다.