IComparable 및 IComparer 인터페이스 Visual C#에서 사용 하는 방법
static void Main(string[] args)
{
// Create an arary of car objects.
car[] arrayOfCars = new car[8] {
new car("Ford",1992),
new car("Fiat",1988),
new car("Buick",1932),
new car("Ford",1932),
new car("Dodge",1999),
new car(string.Empty,1990 ),
new car("sexy",null ),
new car("Honda",1977)
};
// Write out a header for the output.
Console.WriteLine("Array - Unsorted\n");
foreach (car c in arrayOfCars)
Console.WriteLine(c.Make + "\t\t" + c.Year);
// Demo IComparable by sorting array with "default" sort order.
Array.Sort(arrayOfCars);
Console.WriteLine("\nArray - Sorted by Make (Ascending - IComparable)\n");
//Array.Sort(arrayOfCars, car.sortMakeAscending());
//Console.WriteLine("\nArray - Sorted by Make (Ascending - IComparable)\n");
foreach (car c in arrayOfCars)
Console.WriteLine(c.Make + "\t\t" + c.Year);
// Demo descending sort of string value with IComparer.
Array.Sort(arrayOfCars, car.sortMakeDescending());
Console.WriteLine("\nArray - Sorted by Make (Descending - IComparer)\n");
foreach (car c in arrayOfCars)
Console.WriteLine(c.Make + "\t\t" + c.Year);
// Demo ascending sort of numeric value with IComparer.
Array.Sort(arrayOfCars, car.sortYearAscending());
Console.WriteLine("\nArray - Sorted by Year (Ascending - IComparer)\n");
foreach (car c in arrayOfCars)
Console.WriteLine(c.Make + "\t\t" + c.Year);
// Demo descending sort of numeric value using IComparer.
Array.Sort(arrayOfCars, car.sortYearDescending());
Console.WriteLine("\nArray - Sorted by Year (Descending - IComparer)\n");
foreach (car c in arrayOfCars)
Console.WriteLine(c.Make + "\t\t" + c.Year);
// Demo ascending sort of numeric value with IComparer.
Array.Sort(arrayOfCars, car.sortNullYearAscending());
Console.WriteLine("\nArray - Sorted by Year (NullAscending - IComparer)\n");
foreach (car c in arrayOfCars)
Console.WriteLine(c.Make + "\t\t" + c.Year);
// Demo descending sort of numeric value using IComparer.
Array.Sort(arrayOfCars, car.sortNullYearDescending());
Console.WriteLine("\nArray - Sorted by Year (NullDescending - IComparer)\n");
foreach (car c in arrayOfCars)
Console.WriteLine(c.Make + "\t\t" + c.Year);
Console.ReadLine();
}
public class car : IComparable
{
// Beginning of nested classes.
// Nested class to do ascending sort on year property.
private class sortYearAscendingHelper : IComparer
{
int IComparer.Compare(object a, object b)
{
car c1 = (car)a;
car c2 = (car)b;
if (c1.year > c2.year)
return 1;
if (c1.year < c2.year)
return -1;
else
return 0;
}
}
// Nested class to do descending sort on year property.
private class sortYearDescendingHelper : IComparer
{
int IComparer.Compare(object a, object b)
{
car c1 = (car)a;
car c2 = (car)b;
if (c1.year < c2.year)
return 1;
if (c1.year > c2.year)
return -1;
else
return 0;
}
}
private class sortNullYearAscendingHelper : IComparer
{
int IComparer.Compare(object a, object b)
{
car c1 = (car)a;
car c2 = (car)b;
if (c1.year == null && c2.year == null)
return 0;
if (c1.year != null && c2.year == null)
return -1;
if (c2.year != null && c1.year == null)
return 1;
if (c1.year > c2.year)
return 1;
if (c1.year < c2.year)
return -1;
else
return 0;
}
}
// Nested class to do descending sort on year property.
private class sortNullYearDescendingHelper : IComparer
{
int IComparer.Compare(object a, object b)
{
car c1 = (car)a;
car c2 = (car)b;
//if (string.IsNullOrEmpty(Convert.ToString(c1.year)) || string.IsNullOrEmpty(Convert.ToString(c2.year)))
// return -1;
if (c1.year == null && c2.year == null)
return 0;
if (c1.year != null && c2.year == null)
return -1;
if (c2.year != null && c1.year == null)
return 1;
if (c1.year < c2.year)
return 1;
if (c1.year > c2.year)
return -1;
else
return 0;
}
}
// Nested class to do descending sort on make property.
private class sortMakeDescendingHelper : IComparer
{
int IComparer.Compare(object a, object b)
{
car c1 = (car)a;
car c2 = (car)b;
return String.Compare(c2.make, c1.make);
}
}
// End of nested classes.
private int? year;
private string make;
public car(string Make, int? Year)
{
make = Make;
year = Year;
}
public int? Year
{
get { return year; }
set { year = value; }
}
public string Make
{
get { return make; }
set { make = value; }
}
// Implement IComparable CompareTo to provide default sort order.
int IComparable.CompareTo(object obj)
{
car c = (car)obj;
return String.Compare(this.make, c.make);
}
// Method to return IComparer object for sort helper.
public static IComparer sortYearAscending()
{
return (IComparer)new sortYearAscendingHelper();
}
// Method to return IComparer object for sort helper.
public static IComparer sortYearDescending()
{
return (IComparer)new sortYearDescendingHelper();
}
public static IComparer sortNullYearAscending()
{
return (IComparer)new sortNullYearAscendingHelper();
}
// Method to return IComparer object for sort helper.
public static IComparer sortNullYearDescending()
{
return (IComparer)new sortNullYearDescendingHelper();
}
// Method to return IComparer object for sort helper.
public static IComparer sortMakeDescending()
{
return (IComparer)new sortMakeDescendingHelper();
}
//public static IComparer sortMakeAscending()
//{
// return (IComparer)new sortMakeAscendingHelper();
//}
}
'.NET > C# Basic' 카테고리의 다른 글
Visual Studio c# 전처리문 빌드 조건, 개발 운영 빌드 다르게 하고 싶을때 전처리기 팁 (1) | 2024.05.25 |
---|---|
IIS HTTPS 세팅하기 및 C# 사설 SSL 인증서 호출 사용하기 OPENSSL 사용하기 (0) | 2023.03.14 |
C# CallerMemberNameAttribute Class 소개 (0) | 2016.02.29 |
DLL Ressource 에서 BitmapImage 불러오기 Method (1) | 2013.01.11 |
Visual Studio 2005의 원격 디버깅 설정(http://www.hoonsbara.com/) (1) | 2010.06.14 |
[C#] String.Format 을 이용한 문자정렬 왼쪽 오른쪽 가운데 | String alignment Left Right Center (0) | 2010.03.20 |
[C#] char[] + char[] = char[]?? | char[] Merge (0) | 2010.02.09 |
[C#] Thread를 정복해 보자 (0) | 2010.02.06 |