作者:Mahesh Chand 
原文地址:http://www.c-sharpcorner.com/UploadFile/mahesh/SortableArrays10212005115603AM/SortableArrays.aspx?ArticleID=d374d179-08e9-4473-b7e4-1991fad8affa

.NET Framework类库中提供了几个支持在集合中有追加功能的接口,比如:ICollection,IList和IComparable。 

实现 IComparable

IComparable接口用来支持在集合中排序。它有一个函数——CompareTo。当你设计分类对象时,你必须实现IComparable的CompareTo方法。

比如,我做一个Developer类来继承IComparable。

用IComparable来实现可排序的集合public class Developer : IComparable
}

现在我来实现ComparaTo方法如下:

用IComparable来实现可排序的集合public int CompareTo(object obj)
}

现在我们说,Developer类有一个属性叫ID,而你希望你的这些项目按照ID来排序,我们简单的加入如下代码:

用IComparable来实现可排序的集合public int CompareTo(object obj)
用IComparable来实现可排序的集合
}

正如你所看到的上面的代码,它来比较当前对象的值和新值作比较。

现在我们说,Developer对象还有其他公有属性:FirstName,LastName,Age以及Experience,并且你想用它们中的任意一个来分类。

为了做到这点,我们定义一个枚举:

用IComparable来实现可排序的集合public enum SortFilter
用IComparable来实现可排序的集合
}

然后,我在Developer类中加入一个静态属性SortFilter:

用IComparable来实现可排序的集合private static SortFilter sortingBy = SortFilter.FirstName; 
用IComparable来实现可排序的集合
public static SortFilter SortingBy
}

现在我修改ComparaTo方法如下:

用IComparable来实现可排序的集合public int CompareTo(object obj)

正如你所看到的上面的代码,我为每一个分类条件加入一个case语句。现在我的类准备好了支持排序。所有我做的工作是:建立一个Developer对象的ArrayList,设置分类过滤器(SortFilter),调用Sort方法。

下面的代码生成一个Developer类型的ArrayList:
用IComparable来实现可排序的集合private ArrayList GetList()

下面的代码设置以"FirstName"来分类,调用ArrayList的Sort方法。现在ArrayList将返回分类结果。
用IComparable来实现可排序的集合ArrayList list = GetList();
用IComparable来实现可排序的集合Developer.SortingBy 
= (SortFilter)Enum.Parse(typeof(SortFilter), "FirstName");
用IComparable来实现可排序的集合list.Sort();

排序顺序

现在你可能还要在你的对象中加入排序的顺序(升序还是降序)。为了完成这个,我加入一个SortOrder枚举:
用IComparable来实现可排序的集合public enum SortOrder
}

我也在Developer类中加入静态属性SortingOrder如下:
用IComparable来实现可排序的集合private static SortOrder sortingOrder = SortOrder.Ascending;
用IComparable来实现可排序的集合
public static SortOrder SortingOrder
}

我将CompareTo方法改成如下。正如你从这个函数中看到,现在我来检测SortingOrder是Ascending还是Descending来根据要排序的属性排序。

用IComparable来实现可排序的集合public int CompareTo(object obj)
}

现在需要做的就是,将SortingOrder属性加入Developer对象中,调用Sort函数。
用IComparable来实现可排序的集合Developer.SortingOrder = (SortOrder)Enum.Parse(typeof(SortOrder), "Descending");
用IComparable来实现可排序的集合list.Sort();
用IComparable来实现可排序的集合

原文页面有代码下载。

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-01-09
  • 2021-04-01
  • 2022-12-23
  • 2021-06-24
  • 2022-12-23
猜你喜欢
  • 2021-12-08
  • 2021-09-08
  • 2022-12-23
  • 2021-07-07
  • 2022-12-23
  • 2021-10-05
相关资源
相似解决方案