《你必須知道的.net》**
|anytao技術部落格
anytao
anytao.com
,anytao原創作品,轉貼請註明作者和出處。
對集合元素進行排序是經常發生的事情,事實上大部分的集合型別都預設實現了sort方法,進行其元素的排序操作。例如list集合的sort方法有:
public void sort();在排序使用上,四個sort是大同小異,唯一不同的是大部分情況下,排序的要求決定了我們不能完全滿足於預設排序的情況,因為framework根本不清楚「你」排序的目的,例如:public void sort(comparison
comparison);
public void sort(icomparer
comparer);
public void sort(int index, int count, icomparer
comparer);
bookstore bs = new如果需要對書店的書目進行排序,那麼在我們的小示例中至少可以按照書名、書價和出版日期進行排序,因此.net framework在設計上為sort提供了很好的擴充套件,通常情況下我們需要實現自定義的comparison和comparer,例如:bookstore
, new
book,
new
book }};
// release : code01, 2009/04/12你看利用lambda表示式實現乙個custom comparison是何其簡單:// author : anytao,
// list : protram.cs
//02 sort by custom comparison
bs.books.sort((a, b) => );
foreach (var item in bs.books)
:, ", item.name, item.price, item.publishdate.tostring()));
}
bs.books.sort((a, b) => );輸出的結果為:
如果我們實現以出版日期進行排序的custom comparison,應該是這樣:
bs.books.sort((a, b) => );排序的結果如我所願:
利用lamdba表示式實現的comparison變得非常簡單,優雅有度,我們回歸複雜將lamdba表示式解析為匿名方法(anonymous method):
// release : code01, 2009/04/12如果你對匿名方法還心存芥蒂,那麼我們回歸custom comparison的最本源實現:// author : anytao,
// list : protram.cs
//03 sort by custom comparison: anonymous method
bs.books.sort(delegate(book a, book b)
);
// release : code01, 2009/04/12利用bookcomparison 進行比較,// author : anytao,
// list : bookcomparison.cs
public class
bookcomparison : icomparer
}
//04 sort by custom comparison: bookcomparison輸出的結果和bs.books.sort((a, b) => );一樣,可謂皆大歡喜。bs.books.sort(new
bookcomparison().compare);
// release : code01, 2009/04/12新增乙個comparisontype結構,在bookcomparson初始化時決定comparison的方式:// author : anytao,
// list : bookcomparison.cs
public class
bookcomparison : icomparer
public int compare(book x, book y)
return 0;}}
//04 sort by custom comparison: bookcomparison自定義comparison為實現更好的sort控制,提供了很好的擴充套件機制。在我們的實際應用中,對於例如bookstore這樣的具體應用而言,我更推薦以linq的orderby來實現,例如:bs.books.sort(new
bookcomparison(comparisontype.publishdate).compare);
//05 sort by linqorderby子句可以選擇任意的排序條件,同時ascending或者descending控制公升序和降序。var list = from c in bs.books
orderby c.publishdate ascending
select c;
foreach (var item in list)
:, ", item.name, item.price, item.publishdate.tostring()));
}
何去何從,看官自評。
2009/04/12 | |
本文以「現狀」提供且沒有任何擔保,同時也沒有授予任何權利。 | this posting is provided "as is" with no warranties, and confers no rights.
IT餐館 第三回 模式
就在上回聚會後不久,杜鵬就在 msn上聯絡雨辰,說他們公司最近新招來了兩個新人,其中乙個小伙對設計模式很感興趣,沒事就找老杜聊怎麼學這個東西,老杜想起雨辰前些 年總愛在酒桌上與大家聊這些話題,所以就想單獨約雨辰出來給那個小伙講講。雨辰因為最近產品要發布測試版有些忙,所以就約在三天後的週六中午在王利的...
第三回 實數域
上回已經構造了實數系 mathbb r sim.下面在 mathbb 上定義一些運算使之構成乙個域.mathbb 中的元素由有理數基本列的等價類 a n 構成,為了記號的方便,我們今後就用 a n 來表示.仿照有理數域,我們希望定義加減乘除.其中加法和減法比較好定義 a n b n a n b n ...
第三回 Controller與View
這節我們讓asp.net mvc真正的跑起來 首先我們自己新建乙個新的controller在controllers上點右鍵,新增,controller選項 之後出現乙個對話方塊 這裡我們將之起名為eicecontroller 附註一下,這裡是個純廣告,無興趣可略過此行 www.eice.com.cn...