using System;
using System.Collections;
namespace MyPractise.MyArray.ReachSort
{
class Program
{
static void Main(string [] args)
{
ArrayItem firstArrayItem = new ArrayItem ();
ArrayItem secondArrayItem = new ArrayItem ();
firstArrayItem.FirstItem = "xxx" ;
firstArrayItem.SecondItem = "yyy" ;
secondArrayItem.FirstItem = "yyyy" ;
secondArrayItem.SecondItem = "xxxx" ;
ArrayItem [] myArray = new ArrayItem [2];
myArray[0] = firstArrayItem;
myArray[1] = secondArrayItem;
//Set an array instance item so that Sort() can recognize the compare type.
//Compare() is the current item compare type.
Array .Sort(myArray, new ArrayItem (ArrayItem .CompareType .SecondItem));
Console .WriteLine("First Sort..." );
foreach (ArrayItem arrayItem in myArray)
{
Console .WriteLine("FirstItem:{0},SecondItem:{1}" ,arrayItem.FirstItem,arrayItem.SecondItem);
}
//CompareTo() is the current item compare type.
Array .Sort(myArray);
Console .WriteLine("Sort Again..." );
foreach (ArrayItem arrayItem in myArray)
{
Console .WriteLine("FirstItem:{0},SecondItem:{1}" , arrayItem.FirstItem, arrayItem.SecondItem);
}
Console .ReadKey();
}
}
//Assert the interface IComparer
class ArrayItem : IComparer ,IComparable
{
public enum CompareType
{
FirstItem,
SecondItem
}
public string FirstItem { get ; set ; }
public string SecondItem { get ; set ; }
public CompareType CurrentCompareType { get ; set ; }
public ArrayItem(CompareType currentCompareType)
{
this .CurrentCompareType = currentCompareType;
}
public ArrayItem()
{
this .CurrentCompareType = CompareType .FirstItem;
}
//Assert the method of Interface IComparer
public int Compare(object x, object y)
{
ArrayItem firstCompareItem = (ArrayItem )x;
ArrayItem secondCompareItem=(ArrayItem )y;
switch (CurrentCompareType)
{
case CompareType .FirstItem:
return firstCompareItem.FirstItem.CompareTo(secondCompareItem.FirstItem);
case CompareType .SecondItem:
return firstCompareItem.SecondItem.CompareTo(secondCompareItem.SecondItem);
default :
throw new ArgumentException ("Unexpected compare type, please have a double check for your array item." );
}
}
//Assert the method of Interface IComparable
public int CompareTo(object obj)
{
ArrayItem compareItemInstance = (ArrayItem )obj;
return FirstItem.CompareTo(compareItemInstance.FirstItem);
}
}
}