在編寫程式處理資料時經常需要對自己組織的資料進行排序,有時還是不同形式的排序,在c++中可以自定義結構體重載bool operator函式,也可以自己寫int compare()
。而在c#中自定義排序,就需要對類的icomparer<>
介面進行實現,排序時呼叫sort()
方法時將實現的排序介面作為引數傳入即可。
本文同步更新在假定現在有一組學生的三門課成績
class student
接下來分別實現對學生的成績分科排序和總分排序。
分科排序是指:先按score1由小到大排,若score1一樣則按score2由小到大排,否則按score3由小到大。
總分排序就是按照學生三科成績之和由小到大排。
使用隨機數生成n個學生的分數,並儲存在lista
當中
private
static
void
main()
...}
先實現分科排序,建立名為score123rank
的類繼承icomparer
介面,主要是實現其int compare()
函式,實現分科排序的功能。
class score123rank : icomparer
catch
}}
這樣,在主函式中只需要呼叫a.sort(new score123rank())
就完成了排序。輸出排序後的結果看一下:
a.
sort
(new
score123rank()
);for(
int i=
0;i)\t\t"
, a[i]
.score1,a[i]
.score2,a[i]
.score3)
;}
類似地,再編寫總分排序的類totalrank。
class totalrank : icomparer
catch
}}
這樣再呼叫a.sort(new totalrank())
就對a中按照總分進行了排序。
完整main函式為
private
static
void
main()
a.sort
(new
score123rank()
);for(
int i=
0;i)\t\t"
, a[i]
.score1,a[i]
.score2,a[i]
.score3);}
console.
writeline()
; a.
sort
(new
totalrank()
);for(
int i=
0;i)\t\t"
, a[i]
.score1,a[i]
.score2,a[i]
.score3);}
}
執行結果如下所示。空白行的前邊是分科排名,後邊是總分排名。
C自定義型別
一 自定義型別基本概念 1 結構體 結構體就是將任意多個內建型別變數包含在一起形成的乙個結構,結構特也可以巢狀定義,不能在內部定義自己結構的變數,因為是不完整的型別,但是可以定義指向自己型別的指標,這也是鍊錶的原理,其定義形式如下 struct a 2 列舉 列舉型別是由一些項組成的型別,具體看 列...
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...
c 自定義排序
class program console.writeline console.writeline source tolist value var list arr.tolist for int i 0 i 10 i console.writeline console.writeline sourc...