?
我們都知道在全部程序設計語言中數組都是一個非常重要的概念,數組的作用是同意程序猿用同一個名稱來引用多個變量,因此採用數組索引來區分這些變量。非常多情況下利用數組索引來設置一個循環,這樣就能夠高效地處理復雜的情況,因此在非常多情況下,使用數組能夠縮短或者簡化程序的代碼。本文主要介紹VB.NET數組的使用,希望對大家的使用帶來幫助。
數組中的第一個元素的下標稱為下界,最后一個元素的下標稱為上界,其余的元素連續地分布在上下界之間,而且數組在內存中也是用連續的區域來存儲的,所以要求聲明數組每維的長度不能超過Long數據類型的最大值,即264—1=263。
我們把VB.NET數組當作一個對象來處理,這就意味著數組類型是單個引用類型,數組變量包括指向構成數組元素、數組維和數組長度等數據的指針,數組之間互相賦值事實上僅僅是在相互復制指針,并且數組繼承了System名字空間的Array類。
VB.NET中提供的數組類型和VB 6.0中有一些區別,我們將在以下做具體的解說。
(1)VB.NET數組的聲明
VB.NET中的數組有兩種類型:定長數組和動態數組。這里先介紹定長數組的幾種不同的聲明方式,不同的聲明方法將導致數組不同的有效范圍。
◆Dim語句在模塊段建立模塊級數組,比如:
- Dim?arrayl(3)As?Integer ?
◆Public語句在模塊的聲明部分建立一個公共數組,比如:
- Public?counttype(20)as?string ?
◆Static語句聲明一個過程內的局部數組,比如:
- Public?Sub?Ipaddress() ?
- Static?server(30)as?string ?
- End?Sub?
VB.NET還提供了新的數組初始化語法,僅僅須要簡單的語句就能夠完畢數組的聲明和初始化,比如:
- New?array?initialization?syntax ?
- Dim?arrayl?As?Integer()={2,4,8}?
在VB.NET中,為了和其它語言更加易于協同操作,數組的下標均設定為0,不同意聲明一個下界為1的數組,因此Option Base語句不再被VB.NET支持,并且在聲明一個數組時必須用它的元素個數,而不是它的上界來初始化,比如:
- //聲明一個一維數組具有3個元素,下標從0~2 ?
- Dim?arrayl(3)As?Integer ?
- arrayl(0):2 ?
- arrayl(1)=4 ?
- arrayl(2)=8?
以上聲明的數組有三個元素,下標從0到2,假設代碼企圖訪問下標為3的數組元素,將引起執行錯誤。
(2)二維數組及多維數組
除了較為簡單的一維數組外,VB.NET還支持多維數組,其聲明方法和一維數組沒有太大的差別,比如:
- StatiC?multidim(10,10)as?double ?
- ?Public?Singledim(5,8,10,3)as?single?
以上語句聲明了一個lO行,10列的二維數組。在VB.NET中,數組最多有32維,并且每一維的長度都不可以超過Long數組類型的最大值。數組總尺寸的限制是不一樣的,這與所採用的操作系統以及計算機中使用的內存量有關。數組的維數將保留在System.Array.Rank屬性中,每維的長度可以由System.Array.GetLengfll方法來得到。須要提醒注意的是,因為VB.NET中數組是以0為基的,假設返回來的值為9,則表示數組是10維的。當為數組繼續加入維數的時候,使其擴展為多位數組,此時會使數組所需的存儲空間大幅度添加,所以在使用多維數組時對這個方面也要多加考慮。
另外VB.NET還提供了Lbound()和Lbound()兩個函數來返回數組的上、下界。中國自學編程網整理公布 ,www.zxbc.cn對于一維數組而言,僅僅須要一個參數,那便是數組名。比如:
- one==Ubound(arrayl)?
對于多位數組,也僅僅是簡單地將逗號后面的第二個參數指定為數組的第幾維。比如:
- tw0=Lbound(multidim,7)?
假設沒有指明是哪一維,系統默覺得第一維。
(3)動態數組
有時在程序執行之前無法確認數組的大小,VB.NET提供了在程序執行時動態決定數組大小的功能,即動態數組。它具有靈活多變的特點,能夠在不論什么時候依據須要隨時改變數組的大小,有助于內存的管理。建立一個動態數組的具體過程例如以下:
①和聲明一般數組一樣,能夠使用前面介紹的幾種聲明,僅僅是賦一個空維數組,這樣就將數組聲明為動態數組。典型的聲明語句為:
- Dim?types(??)??As?integer?
②然后使用ReDim語句來配置數組大小。ReDim語句聲明僅僅能在過程其中使用,它是可運行語句,能夠改變數組中元素的個數,可是卻不能夠改變數組的維數,就是說不能把一維變為二維。在ReDim語句配置數組元素個數時,數組中的內容將所有置為0。典型語句為:
- ReDim?Types(X+1) ?
③假設想改變數組大小又不想丟失原來的數據,僅僅要在ReDim語句中包括Preservekeyword就能夠,典型語句為:
- ReDa_m?PresetVe?Types(10,23)?
對于多維數組,在使用Preservekeyword時,僅僅能改動最后一維的大小。假設改變其它維,那么將出現執行錯誤。假設不清楚某維的當前大小,能夠使用GetI~ength函數來獲取。
(4)VB.NET數組的使用
在’VB 6.0中,能夠用For Each來循環遍歷一個數組。比如:
- Dim?x?As?Integer ?
- ??F0r?Each?x?In?arrayl ?
- ??Console.WriteLine(x) ?
- ??Next?
在VB.NET中能夠使用For循環和數組長度來遍歷一個數組。比如:
- Dim?i?As工nteger ?
- ???F0r?i=0?T0??(arrayl.Length-1) ?
- ?
- ???Console.WriteLine(arrayl(1)J ?
- ???Next?i ?
在使用數組時還要注意,不僅聲明語法有變化,并且在執行時處理方式也有了非常大的變化。VB.NET在堆棧中給數組分配地址空間,當向一個方法傳遞數組類型的參數時,使用的是引用傳遞而不是值傳遞。以下是互相傳遞數組引用的三個方法:
- Dim?arrayl(3,3)AS?Integer ?
- ????Dim?array2?As?Integer(,) ?
- ????Redim?array2(3,3) ?
- ????Dim?array3?As?Integer(,)={{2,4},{12,29}} ?
方法一在兩個方向同一時候傳遞了數組引用,一般用來向調用者返回數組引用。方法二和方法三從調用者向方法的實現中傳遞了數組引用。方法二的參數被聲明為一維數組,而在方法三中參數被聲明成了-維數組。
(5)數組的高級特性
①數組的數組
在O~ect數組中還能夠組裝不同類型的數組。比如,下面代碼中先建立兩個數組,一個是Integer類型,還有一個是String類型,然后再聲明一個O~ect類型的數組,把前兩個數組分裝在當中。
- Dim?I?as?integer ?
- //聲明一個integer類型的數組 ?
- Dim?grade(15)as?integer ?
- For?i:0?tO?14 ?
- Grade(i)=i ?
- NeXt?i ?
- //聲明一個string類型的數組 ?
- Dim?name(15)as?String ?
- For?i=0?tO?14 ?
- Name(i):”Student”&cstr(i) ?
- Next?i ?
- //聲明一個新的數組為object,用來組裝其它數組 ?
- Dim?Student(2)as?object ?
- Student(0)=grade ?
- Student(1)=name ?
- Msgbox(student(0)(2))??//顯示”2” ?
- Msgbox(student(1)(3))??//顯示”student?3”。?
上述代碼中使用了student(0)和student(1)的后綁定。注意,僅僅有在Option s~ict被關閉時,VB.NET編譯器才同意使用后綁定。
②數組和集合
盡管集合通經常使用于操作對象,可是它也能操作數據類型。在某些條件下,其效率比數組還要高。我們能夠通過下面4個方面來進行比較。
◆集合能夠依據須要進行擴充,不像數組那樣需預先規定大小。
◆數組僅僅能保存聲明時所定義的數據類型,可是同一個集合中能夠存儲不同類型的數據。
◆集合元素的改動較為麻煩,不像數組那么方便。
◆處理集合的速度較數組慢,可是在處理較小的動態條目集,使用集合是最為理想的選擇。