//
// 요약:
// 형식이 두 개체를 비교하기 위해 구현하는 메서드를 정의합니다.
//
// 형식 매개 변수:
// T:
// 비교할 개체의 형식입니다.
public interface IComparer<in T>
{
//
// 요약:
// 두 개체를 비교하여 한 개체가 다른 개체보다 작거나, 같거나 또는 크다는 것을 나타내는 값을 반환합니다.
//
// 매개 변수:
// x:
// 비교할 첫 번째 개체입니다.
//
// y:
// 비교할 두 번째 개체입니다.
//
// 반환 값:
// 다음 표와 같이 x 및 y의 상대 값을 나타내는 부호 있는 정수입니다. 값 의미 0보다 작음 x가 y보다 작은 경우 0 x가 y와 같습니다.
// 0보다 큼 x가 y보다 큰 경우
int Compare(T x, T y);
}
//
// 요약:
// 동일한 형식의 두 개체를 비교하는 메서드를 나타냅니다.
//
// 매개 변수:
// x:
// 비교할 첫 번째 개체입니다.
//
// y:
// 비교할 두 번째 개체입니다.
//
// 형식 매개 변수:
// T:
// 비교할 개체의 형식입니다.
//
// 반환 값:
// 다음 표와 같이 x 및 y의 상대 값을 나타내는 부호 있는 정수입니다. 값 의미 0 보다 작은 x가 y보다 작은 경우 0 x가 y와 같습니다.
// 0 보다 큼 x가 y보다 큰 경우
public delegate int Comparison<in T>(T x, T y);
// 요약:
// 지정된 비교자를 사용하여 System.Collections.Generic.List`1의 요소 범위에 있는 요소를 정렬합니다.
//
// 매개 변수:
// index:
// 정렬할 범위의 0부터 시작하는 인덱스입니다.
//
// count:
// 정렬할 범위의 길이입니다.
//
// comparer:
// 요소를 비교할 때 사용할 System.Collections.Generic.IComparer`1 구현이거나, 기본 비교자 System.Collections.Generic.Comparer`1.Default를
// 사용하려면 null입니다.
int[] data = { 5, 50, 30, 24, 0, 9 };
List<int> _listData = new List<int>(data);
static void Sort1(List<int> _listData)
{
// 인덱스 1번부터 데이터 수의 -1 만큼
// null이기 때문에 기본 비교자(오름차순 정렬)를 사용하여 정렬됨
_listData.Sort(1, _listData.Count - 1, null);
foreach (var data in _listData)
{
Console.WriteLine("data : " + data);
}
}
// 1번 인덱스부터 정렬했기 때문에 첫 번째 요소를 제외한 모든 요소가 오름차순 정렬된 모습.
// 문자 또는 문자열 형식을 기본 비교자를 사용해 정렬하면 사전 순으로 정렬된다.
Output:
data : 5
data : 0
data : 9
data : 24
data : 30
data : 50
// 요약:
// 지정된 System.Comparison`1을 사용하여 전체 System.Collections.Generic.List`1의 요소를 정렬합니다.
//
// 매개 변수:
// comparison:
// 요소를 비교할 때 사용할 System.Comparison`1입니다.
//
// 예외:
// T:System.ArgumentNullException:
// comparison가 null인 경우
//
// T:System.ArgumentException:
// comparison의 구현으로 인해 정렬 중에 오류가 발생했습니다. 예를 들어 항목을 자기 자신과 비교할 때 comparison에서 0을
// 반환하지 않을 수 있습니다.
_listData.Sort(delegate (CStudent a, CStudent b)
{
if (a.ID > b.ID)
{
return 1;
}
else if (a.ID < b.ID)
{
return -1;
}
return 0;
});
// Student 객체의 ID를 기준으로 오름차순 정렬
// 위 코드와 같이, 하나 이상의 IComparable를 구현해 주어야 한다.
// 요약:
// 기본 비교자를 사용하여 전체 System.Collections.Generic.List`1의 요소를 정렬합니다.
//
// 예외:
// T:System.InvalidOperationException:
// 기본 비교자 System.Collections.Generic.Comparer`1.Default가 System.IComparable`1 제네릭
// 인터페이스 또는 형식 T에 대한 System.IComparable 인터페이스 구현을 찾을 수 없습니다.
public void Sort();
// 요약:
// 지정된 비교자를 사용하여 전체 System.Collections.Generic.List`1에 있는 요소를 정렬합니다.
//
// 매개 변수:
// comparer:
// 요소를 비교할 때 사용할 System.Collections.Generic.IComparer`1 구현이거나, 기본 비교자 System.Collections.Generic.Comparer`1.Default를
// 사용하려면 null입니다.