現集合類Sort自定義排序

2022-03-20 01:53:08 字數 2943 閱讀 9410

對集合元素進行排序是經常發生的事情,事實上大部分的集合型別都預設實現了sort方法,進行其元素的排序操作。例如list集合的sort方法有:

public void sort();

public void sort(comparison

comparison);

public void sort(icomparer

comparer);

public void sort(int index, int count, icomparer

comparer);

在排序使用上,四個sort是大同小異,唯一不同的是大部分情況下,排序的要求決定了我們不能完全滿足於預設排序的情況,因為framework根本不清楚「你」排序的目的,例如:

bookstore bs = new 

bookstore

, new

book,

new

book }};

如果需要對書店的書目進行排序,那麼在我們的小示例中至少可以按照書名、書價和出版日期進行排序,因此.net framework在設計上為sort提供了很好的擴充套件,通常情況下我們需要實現自定義的comparison和comparer,例如:

// release : code01, 2009/04/12                    

// 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()));

}

你看利用lambda表示式實現乙個custom comparison是何其簡單:

bs.books.sort((a, b) => );
輸出的結果為:

如果我們實現以出版日期進行排序的custom comparison,應該是這樣:

bs.books.sort((a, b) => );
排序的結果如我所願:

利用lamdba表示式實現的comparison變得非常簡單,優雅有度,我們回歸複雜將lamdba表示式解析為匿名方法(anonymous method):

// release : code01, 2009/04/12                    

// author : anytao,

// list : protram.cs

//03 sort by custom comparison: anonymous method

bs.books.sort(delegate(book a, book b)

);

如果你對匿名方法還心存芥蒂,那麼我們回歸custom comparison的最本源實現:

// release : code01, 2009/04/12                    

// author : anytao,

// list : bookcomparison.cs

public class

bookcomparison : icomparer

}

利用bookcomparison 進行比較,

//04 sort by custom comparison: bookcomparison

bs.books.sort(new

bookcomparison().compare);

輸出的結果和bs.books.sort((a, b) => );一樣,可謂皆大歡喜。

// release : code01, 2009/04/12                    

// author : anytao,

// list : bookcomparison.cs

public class

bookcomparison : icomparer

public int compare(book x, book y)

return 0;}}

新增乙個comparisontype結構,在bookcomparson初始化時決定comparison的方式:

//04 sort by custom comparison: bookcomparison

bs.books.sort(new

bookcomparison(comparisontype.publishdate).compare);

自定義comparison為實現更好的sort控制,提供了很好的擴充套件機制。在我們的實際應用中,對於例如bookstore這樣的具體應用而言,我更推薦以linq的orderby來實現,例如:

//05 sort by linq

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()));

}

orderby子句可以選擇任意的排序條件,同時ascending或者descending控制公升序和降序。

何去何從,看官自評。

sort自定義排序

1.sort介紹 用於c 中,對給定區間所有元素進行排序。使用的排序方法類似於快排的方法,時間複雜度為n log2 n 執行效率較高 標頭檔案 include algorithm 2.sort使用方法 sort函式有3個引數,sort first,last,cmp 其中,first是元素的起始位址,...

sort自定義排序

參考 例 大整數排序。對n個長度最長可達到1000的數進行排序。輸入第一行為乙個整數n,1 n 100 接下來的n行每行有乙個數,數的長度範圍為1 len 1000。每個數都是乙個正數,並且保證不包含字首零。include include include include using namespac...

sort自定義型別排序

乙個很簡單的問題,不過也磨了我好一會,在些總結記錄。1.對於不用寫自定義資料結構的情況 static int cmp const pair x,const pair y if x.second y.second return x.second y.second else return x.first...