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);
}
}
}
分享到:
相关推荐
一个完整的的继承IComparer IComparable ICollection的例子
本篇文章是对c#中实现IComparable、IComparer接口、Comparer类进行了详细的分析详解,需要的朋友参考下
使用IComparable接口,IComparer接口实现排序功能
实现IComparable和IComparer接口,IEnumerable和IEnumerator接口,IDisposable接口的例子。
IComparable接口 该接口由其值可以排序或排序的类型实现,并提供强类型的比较方法以对泛型集合对象的成员进行排序,例如数字可以大于第二个数字,一个字符串可以在另一个字符串之前以字母顺序出现。他要求实现类型...
对你很有用的哈 接口IComparer比较器关于排序Sort()方法
结论:工厂模式体现在接口作为返回类型的运用中,实际上返回的是实现接口的类的对象。 3、两种比较器以及sort()方法的重载: 结论:Icomparable接口在需要比较的类中实现;Icomparer接口在任何类中实现,使用时只需...
主要介绍了C#使用IComparer自定义List类实现排序的方法,涉及C#使用IComparer接口定义List类进行排序的相关技巧,需要的朋友可以参考下
IComparer比较器.rar IComparer比较器.rar
本篇文章是对IComparable与IComparer的排序实例进行了详细的分析介绍,需要的朋友参考下
主要利用IComparer实现比较器,按各种条件排序,非常实用的技术
2.3 数组元素的清空 1 2.4 System.Array类静态成员 1 2.5 不用循环填充数组 1 2.6 数组类实例成员 2 3 System.Collections 集合 2 3.1 ArrayList 2 3.1.1 实例成员 2 3.1.2 静态成员 2 3.2 List<T> 3 3.3 ...
IComparer 的简单实现,用于通过“块”又名“令牌”对数字、日期时间和字符串等混合内容类型进行“自然”排序。 支持按特定列以及列表/数组对字典/哈希表进行自然排序。 入门 csc.exe / t:library / out:Natural...
1. 配置 2. 数组(1) 3. 数组(2) 4. 命名空间 5. 方法(1) 6. 方法(2) 7. 字符(1) 8....9. 类 10.类的构造(1) 11....33.接口-IComparable 34.接口-IComparer 35.类型 36.装箱与拆箱(1) 37.装箱与拆箱(2) 38.泛型(1)
1. 配置 2. 数组(1) 3. 数组(2) 4....33.接口-IComparable 34.接口-IComparer 35.类型 36.装箱与拆箱(1) 37.装箱与拆箱(2) 38.泛型(1) 39.图片管理器1 39.图片管理器2 39.图片管理器3 39.图片管理器4
接口基本使用 public class NameComparer : IComparer { #region IComparer<Student> 成员 public int Compare(Student x, Student y) { return (x.Name.CompareTo(y.Name)); } #endregion }