對集合元素進行排序是經常發生的事情,事實上大部分的集合類型都默認實現 了Sort方法,進行其元素的排序操作。例如List<T>集合的Sort方法有:
public void Sort();
public void Sort(Comparison<T> comparison);
public void Sort(IComparer<T> comparer);
public void Sort(int index,int count,IComparer<T> comparer);
在排序使用上,四個Sort是大同小異,唯一不同的是大部分情況下,排序的要 求決定了我們不能完全滿足於默認排序的情況,因為Framework根本不清楚“你” 排序的目的,例如:
BookStore bs = new BookStore
{
Books = new List<Book> {
new Book{ID = 1,Name="你必須知道 的.NET",Price=69,PublishDate=DateTime.Parse("2008-3-30")},
new Book{ID = 2,Name="Silverlight完美征 程",Price=75,PublishDate=DateTime.Parse("2009-4-30")},
new Book{ID =3,Name="博客園精華 集",Price=72,PublishDate=DateTime.Parse("2009-5-3")}
}
};
實現自定義的排序算法
如果需要對書店的書目進行排序,那麼在我們的小示例中至少可以按照書名、 書價和出版日期進行排序,因此.NET Framework在設計上為Sort提供了很好的擴 展,通常情況下我們需要實現自定義的comparison和comparer,例如:
// Release : code01,2009/04/12
// Author : Anytao,http://www.anytao.com
// List : Protram.cs
//02 Sort by custom comparison
bs.Books.Sort((a,b) => { return a.Price.CompareTo(b.Price); });
foreach (var item in bs.Books)
{
Console.WriteLine(string.Format("{0}:{1}, {2}",item.Name,item.Price,item.PublishDate.ToString()));
}
你看利用Lambda表達式實現一個Custom Comparison是何其簡單:
bs.Books.Sort((a,b) => { return a.Price.CompareTo (b.Price); });
輸出的結果為: