array類是c#中所有自定義型別陣列的抽象類。這種自定義型別陣列可以像string型別一樣進行排序。這種排序的方法c#在基礎類庫中已經實現了,並且向外提供了可用的介面。只要按照c#中提供的方法就可以方便地實現自定義陣列的排序。
方式一:
自定義類person如下,想實現先按firstname排序,再按lastname排序。如果person類的**可以修改的話,只要讓person類繼承icomparable介面或icomparable介面。該介面只提供了乙個方法compareto(t),用這個方法返回乙個int值用以說明比較物件的大小。方法內的**就是自定義的排序規則。
class本例的自定義規則是先按firstname排序,再按lastname排序,**如下:person
set
}public
string
lastname
set
}public
override
string
tostring()
}
class person : icomparable方式二:set
}public
string
lastname
set
}//icomparable<>介面實現
public
intcompareto(person other)
return
result;
}public
override
string
tostring()
}
有時已定義的類的**允許修改或根本沒有源**只有dll的時候,另一種方法就可以用了。這種方法是建立另乙個自定義的繼承icomparer介面或icomparer介面的類,用來輔助自定義類的排序。該介面只提供了方法compare(x,y)。(類似compareto(t)) 用這個方法返回乙個int值用以說明比較物件的大小。方法內的**就是自定義的排序規則。。在輔助類personcompare中排序的規則定義了兩條,一是先按lastname排序,再按firstname排序,二是先按firstname排序,再按lastname排序。並用了乙個enum列舉類來區分這兩種排序。**如下:
enum兩種方式的使用如下:personcomparetype
class personcompare : icomparer
//icomparer<>介面實現
public
intcompare(person x, person y)
}break
;
//先按firstname排序
case
personcomparetype.firstname:
}break
;
default
:
}return
result;}}
static使用array類的兩個sort方法分別與上述兩種方式相結合實現排序。方式一與只有自定義陣列本身的sort方法聯合使用。方式二與有自定義陣列和icomparer型別兩個引數的sort方法一起使用。其實自己只需要實現排序規則說明的方法。而具體用什麼方法排序是由c#基礎類庫實現的(當然我們也可以根據需求自己實現)。c#基礎類庫中用的排序方法是quicksort演算法,有機會看看源**。void main(string
args)
,new person ,
new person
};console.writeline(
"firstname");
//方式一 (先按firstname排序)
array.sort(ps);
foreach (person p in
ps)
", p.tostring());
}console.writeline(
"lastname");
//方式二 (先按lastname排序)
array.sort(ps, new
personcompare(personcomparetype.lastname));
foreach (person p in
ps)
", p.tostring());
}console.writeline(
"firstname");
//方式二 (先按firstname排序)
array.sort(ps, new
personcompare(personcomparetype.firstname));
foreach (person p in
ps)
", p.tostring());
}console.readkey();
}
結果如下:
參考:c# 高階程式設計(第7版)
spark兩種自定義排序方式
一 目標物件新增隱式轉換函式的方式實現自定義排序 object mysortelse 隱式轉換函式實現自定義排序 object customsort1 學生類 case class student name string,age int,score int 二 目標物件實現ordered特質的方式實...
spark兩種自定義排序方式
一 目標物件新增隱式轉換函式的方式實現自定義排序 object mysortelse 隱式轉換函式實現自定義排序 object customsort1 學生類 case class student name string,age int,score int 二 目標物件實現ordered特質的方式實...
Android 兩種自定義的Menu
雖然兩種方法有很多相似的地方,但是使用的方法不同,廢話不多說,帖方法了 方法一功能簡述 要實現能代替系統選單的自定義選單必須保證以下基本功能的實現 能通過menu鍵隱藏顯示選單 截獲系統menu鍵動態隱藏顯示 當獲得焦點時高亮顯示獲得焦點的選單項 實現按下選單狀態效果 能設定選單背景 能設定選單項背...