使用.NET Array類(lèi)的Sort方法分類(lèi)數(shù)值
Sort方法
使用Array類(lèi)的靜態(tài)Sort方法是分類(lèi)數(shù)組內(nèi)容的最簡(jiǎn)單方法。列表A通過(guò)對(duì)一組姓名進(jìn)行分類(lèi),說(shuō)明如何應(yīng)用這個(gè)方法。
它生成了下面的結(jié)果,它顯示了調(diào)用分類(lèi)方法前后的姓名列表:
0. Howard, Ryan
1. Allen, Ray
2. Pujols, Albert
3. Iverson, Allen
0. Allen, Ray
1. Howard, Ryan
2. Iverson, Allen
3. Pujols, Albert
下面是對(duì)應(yīng)的VB.NET代碼
Dim x As Integer |
Array類(lèi)的Sort方法能夠以各種形式對(duì)數(shù)組內(nèi)容進(jìn)行分類(lèi)。既然你了解了這個(gè)方法的最簡(jiǎn)單應(yīng)用形式,下面給出它的其它一些用途:
Sort(Array, Array);根據(jù)第一個(gè)數(shù)組中的鍵對(duì)一對(duì)一維數(shù)組(一個(gè)包含鍵,另一個(gè)包含對(duì)應(yīng)的項(xiàng)目)對(duì)象進(jìn)行分類(lèi)。
Sort(Array, IComparable):用指定的Icomparable接口分類(lèi)一個(gè)一維數(shù)組中的元素。
Sort(Array, Array, IComparable):用指定的Icomparable接口根據(jù)第一個(gè)數(shù)組中的鍵對(duì)一對(duì)一維數(shù)組(一個(gè)包含鍵,另一個(gè)包含對(duì)應(yīng)的項(xiàng)目)對(duì)象進(jìn)行分類(lèi)。
Sort(Array, Integer, Integer):對(duì)一個(gè)一維數(shù)組指定起點(diǎn)與終點(diǎn)位置(整數(shù)值)的某個(gè)部分中的元素進(jìn)行分類(lèi)。
Sort(Array, Array, Integer, Integer):根據(jù)第一個(gè)數(shù)組中的鍵對(duì)一對(duì)一維數(shù)組(一個(gè)包含鍵,另一個(gè)包含對(duì)應(yīng)的項(xiàng)目)對(duì)象的某個(gè)部分進(jìn)行分類(lèi)。
Sort(Array, Integer, Integer, IComparable):用指定的Icomparable接口對(duì)一個(gè)一維數(shù)組某一部分中的元素進(jìn)行分類(lèi)。
Sort(Array, Array, Integer, Integer, IComparable):用指定的Icomparable接口根據(jù)第一個(gè)數(shù)組中的鍵對(duì)一對(duì)一維數(shù)組(一個(gè)包含鍵,另一個(gè)包含對(duì)應(yīng)的項(xiàng)目)對(duì)象的某個(gè)部分進(jìn)行分類(lèi)。
你可以應(yīng)用Array類(lèi)的默認(rèn)行為對(duì)整個(gè)數(shù)組和一個(gè)數(shù)組的某個(gè)部分進(jìn)行分類(lèi);你還可以通過(guò)一個(gè)特殊的Icomparable接口指定詳細(xì)的分類(lèi)方法。列表B中的例子使用了兩個(gè)數(shù)組,一個(gè)數(shù)組包含鍵而另一個(gè)數(shù)組包含要分類(lèi)的相應(yīng)項(xiàng)目。它和增加鍵數(shù)組的第一個(gè)例子相同。
得到的結(jié)果是根據(jù)鍵數(shù)組中的值分類(lèi)的數(shù)組值(第二個(gè)數(shù)組在調(diào)用Sort方法時(shí)指定)。列表C中是對(duì)應(yīng)的VB.NET代碼。
#p#
你可以對(duì)代碼稍微進(jìn)行一些調(diào)整,調(diào)用適當(dāng)?shù)腟ort方法,使它只分類(lèi)一個(gè)對(duì)象。下面的代碼利用前一個(gè)例子,但只對(duì)數(shù)組中的第二和第三個(gè)元素進(jìn)行分類(lèi)。
int[] keys = new int[4]; |
下面是對(duì)應(yīng)的VB.NET代碼:
Dim keys(3) As Integer |
分類(lèi)自定義對(duì)象
雖然簡(jiǎn)單的Sort方法十分方便,但你不能使用它對(duì)自定義數(shù)據(jù)類(lèi)型的數(shù)組進(jìn)行自動(dòng)分類(lèi)。畢竟,你不能指望.NET平臺(tái)了解所有建立的對(duì)象!但是,你仍然能夠使用Icomparer或Icomparable接口說(shuō)明自定義對(duì)象的分類(lèi)方法。
這些接口為你提供一個(gè)比較對(duì)象實(shí)例的方法,從而使分類(lèi)更加方便。這兩個(gè)接口的主要不同在于:在使用IComparable接口時(shí)必須把比較方法包括在類(lèi)中,而使用Icomparer時(shí)則不必這樣。兩個(gè)接口的使用細(xì)節(jié)不在本文的討論范圍之內(nèi),不過(guò)下面我將用IComparable接口對(duì)一個(gè)自定義類(lèi)數(shù)組進(jìn)行分類(lèi)。
在列表D中,我利用IComparable接口處理分類(lèi)邏輯和它的類(lèi)。如代碼所示,我建立了一個(gè)Person類(lèi)。注意,它使用IComparable接口并(在分類(lèi)時(shí))用CompareTo方法來(lái)進(jìn)行比較。
在下一個(gè)例子中,建立一個(gè)Person數(shù)組對(duì)象時(shí),又用到這個(gè)類(lèi)。(IComparable接口所需要的)CompareTo方法是對(duì)Person類(lèi)進(jìn)行分類(lèi)的關(guān)鍵,它將提交的對(duì)象與自身進(jìn)行比較。接下來(lái),再調(diào)用數(shù)組的Sort方法,利用Person類(lèi)的分類(lèi)機(jī)制,根據(jù)數(shù)組中每個(gè)對(duì)象的第一個(gè)名稱(chēng)屬性進(jìn)行其中的項(xiàng)目進(jìn)行分類(lèi)。列表E中是所使用且進(jìn)行了分類(lèi)的Person對(duì)象。列表F中是對(duì)應(yīng)的VB.NET代碼,它首先列出了Person類(lèi)。
各種選擇
任何數(shù)據(jù)似乎都要進(jìn)行分類(lèi)。畢竟,人們喜歡看到數(shù)據(jù)以邏輯方式顯示。.NET的Array類(lèi)提供了Sort方法,利用它的值或一個(gè)單獨(dú)的關(guān)鍵值數(shù)組來(lái)簡(jiǎn)化數(shù)組內(nèi)容的分類(lèi)過(guò)程。另外,你還可以應(yīng)用Icomparable接口之類(lèi)的其它.NET功能進(jìn)行自定義分類(lèi)。
【編輯推薦】