VB.NET 數組的定義 動態使用 多維數組

?

我們都知道在全部程序設計語言中數組都是一個非常重要的概念,數組的作用是同意程序猿用同一個名稱來引用多個變量,因此採用數組索引來區分這些變量。非常多情況下利用數組索引來設置一個循環,這樣就能夠高效地處理復雜的情況,因此在非常多情況下,使用數組能夠縮短或者簡化程序的代碼。本文主要介紹VB.NET數組的使用,希望對大家的使用帶來幫助。


數組中的第一個元素的下標稱為下界,最后一個元素的下標稱為上界,其余的元素連續地分布在上下界之間,而且數組在內存中也是用連續的區域來存儲的,所以要求聲明數組每維的長度不能超過Long數據類型的最大值,即264—1=263。

我們把VB.NET數組當作一個對象來處理,這就意味著數組類型是單個引用類型,數組變量包括指向構成數組元素、數組維和數組長度等數據的指針,數組之間互相賦值事實上僅僅是在相互復制指針,并且數組繼承了System名字空間的Array類。

VB.NET中提供的數組類型和VB 6.0中有一些區別,我們將在以下做具體的解說。

(1)VB.NET數組的聲明

VB.NET中的數組有兩種類型:定長數組和動態數組。這里先介紹定長數組的幾種不同的聲明方式,不同的聲明方法將導致數組不同的有效范圍。

◆Dim語句在模塊段建立模塊級數組,比如:

  1. Dim?arrayl(3)As?Integer ?

◆Public語句在模塊的聲明部分建立一個公共數組,比如:

  1. Public?counttype(20)as?string ?

◆Static語句聲明一個過程內的局部數組,比如:

  1. Public?Sub?Ipaddress() ?
  2. Static?server(30)as?string ?
  3. End?Sub?

VB.NET還提供了新的數組初始化語法,僅僅須要簡單的語句就能夠完畢數組的聲明和初始化,比如:

  1. New?array?initialization?syntax ?
  2. Dim?arrayl?As?Integer()={2,4,8}?

在VB.NET中,為了和其它語言更加易于協同操作,數組的下標均設定為0,不同意聲明一個下界為1的數組,因此Option Base語句不再被VB.NET支持,并且在聲明一個數組時必須用它的元素個數,而不是它的上界來初始化,比如:

  1. //聲明一個一維數組具有3個元素,下標從0~2 ?
  2. Dim?arrayl(3)As?Integer ?
  3. arrayl(0):2 ?
  4. arrayl(1)=4 ?
  5. arrayl(2)=8?

以上聲明的數組有三個元素,下標從0到2,假設代碼企圖訪問下標為3的數組元素,將引起執行錯誤。

(2)二維數組及多維數組

除了較為簡單的一維數組外,VB.NET還支持多維數組,其聲明方法和一維數組沒有太大的差別,比如:

  1. StatiC?multidim(10,10)as?double ?
  2. ?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對于一維數組而言,僅僅須要一個參數,那便是數組名。比如:

  1. one==Ubound(arrayl)?

對于多位數組,也僅僅是簡單地將逗號后面的第二個參數指定為數組的第幾維。比如:

  1. tw0=Lbound(multidim,7)?

假設沒有指明是哪一維,系統默覺得第一維。

(3)動態數組

有時在程序執行之前無法確認數組的大小,VB.NET提供了在程序執行時動態決定數組大小的功能,即動態數組。它具有靈活多變的特點,能夠在不論什么時候依據須要隨時改變數組的大小,有助于內存的管理。建立一個動態數組的具體過程例如以下:

①和聲明一般數組一樣,能夠使用前面介紹的幾種聲明,僅僅是賦一個空維數組,這樣就將數組聲明為動態數組。典型的聲明語句為:

  1. Dim?types(??)??As?integer?

②然后使用ReDim語句來配置數組大小。ReDim語句聲明僅僅能在過程其中使用,它是可運行語句,能夠改變數組中元素的個數,可是卻不能夠改變數組的維數,就是說不能把一維變為二維。在ReDim語句配置數組元素個數時,數組中的內容將所有置為0。典型語句為:

  1. ReDim?Types(X+1) ?

③假設想改變數組大小又不想丟失原來的數據,僅僅要在ReDim語句中包括Preservekeyword就能夠,典型語句為:

  1. ReDa_m?PresetVe?Types(10,23)?

對于多維數組,在使用Preservekeyword時,僅僅能改動最后一維的大小。假設改變其它維,那么將出現執行錯誤。假設不清楚某維的當前大小,能夠使用GetI~ength函數來獲取。

(4)VB.NET數組的使用

在’VB 6.0中,能夠用For Each來循環遍歷一個數組。比如:

  1. Dim?x?As?Integer ?
  2. ??F0r?Each?x?In?arrayl ?
  3. ??Console.WriteLine(x) ?
  4. ??Next?

在VB.NET中能夠使用For循環和數組長度來遍歷一個數組。比如:

  1. Dim?i?As工nteger ?
  2. ???F0r?i=0?T0??(arrayl.Length-1) ?
  3. ?
  4. ???Console.WriteLine(arrayl(1)J ?
  5. ???Next?i ?

在使用數組時還要注意,不僅聲明語法有變化,并且在執行時處理方式也有了非常大的變化。VB.NET在堆棧中給數組分配地址空間,當向一個方法傳遞數組類型的參數時,使用的是引用傳遞而不是值傳遞。以下是互相傳遞數組引用的三個方法:

  1. Dim?arrayl(3,3)AS?Integer ?
  2. ????Dim?array2?As?Integer(,) ?
  3. ????Redim?array2(3,3) ?
  4. ????Dim?array3?As?Integer(,)={{2,4},{12,29}} ?

方法一在兩個方向同一時候傳遞了數組引用,一般用來向調用者返回數組引用。方法二和方法三從調用者向方法的實現中傳遞了數組引用。方法二的參數被聲明為一維數組,而在方法三中參數被聲明成了-維數組。

(5)數組的高級特性

①數組的數組

在O~ect數組中還能夠組裝不同類型的數組。比如,下面代碼中先建立兩個數組,一個是Integer類型,還有一個是String類型,然后再聲明一個O~ect類型的數組,把前兩個數組分裝在當中。

  1. Dim?I?as?integer ?
  2. //聲明一個integer類型的數組 ?
  3. Dim?grade(15)as?integer ?
  4. For?i:0?tO?14 ?
  5. Grade(i)=i ?
  6. NeXt?i ?
  7. //聲明一個string類型的數組 ?
  8. Dim?name(15)as?String ?
  9. For?i=0?tO?14 ?
  10. Name(i):”Student”&cstr(i) ?
  11. Next?i ?
  12. //聲明一個新的數組為object,用來組裝其它數組 ?
  13. Dim?Student(2)as?object ?
  14. Student(0)=grade ?
  15. Student(1)=name ?
  16. Msgbox(student(0)(2))??//顯示”2” ?
  17. Msgbox(student(1)(3))??//顯示”student?3”。?

上述代碼中使用了student(0)和student(1)的后綁定。注意,僅僅有在Option s~ict被關閉時,VB.NET編譯器才同意使用后綁定。

②數組和集合

盡管集合通經常使用于操作對象,可是它也能操作數據類型。在某些條件下,其效率比數組還要高。我們能夠通過下面4個方面來進行比較。

◆集合能夠依據須要進行擴充,不像數組那樣需預先規定大小。

◆數組僅僅能保存聲明時所定義的數據類型,可是同一個集合中能夠存儲不同類型的數據。

◆集合元素的改動較為麻煩,不像數組那么方便。

◆處理集合的速度較數組慢,可是在處理較小的動態條目集,使用集合是最為理想的選擇。

轉載于:https://www.cnblogs.com/blfshiye/p/4032843.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375559.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375559.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375559.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

web.xml 中的listener、 filter、servlet 加載順序

1:首先是context-param節點 2:接著配置和調用listeners 并開始監聽 3:然后配置和調用filters filters開始起作用 4:最后加載和初始化配置在load on startup的servlets轉載于:https://www.cnblogs.com/dwchenxj/p/4787717.html

這么多個月,我頭一次體驗用類的概念來寫驅動

原來感覺一樣是那么爽阿。。。快樂得不得了。。。轉載于:https://www.cnblogs.com/suanguade/p/4038190.html

設置Chrome忽略網站證書錯誤

本人在XP下使用Chrome。總是莫名其妙的提示整數錯誤,一部分https網站無法直接訪問。網上找了下,把解決思路記錄下來。 解決這個問題很簡單,只需要修改你平時用來啟動Chrome的快捷方式就可以忽略掉證書錯誤. 具體的操作方法是這樣的: 找到你的Chrome快捷方…

Android開發之合并文件的幾種方式

以下介紹合并文件的幾種方式,并通過合并amr文件來舉例介紹合并文件的詳細流程。amr格式的文件頭是6字節,所以在進行文件合并的時候要減去除第一個文件以外的其它文件的文件頭。 注意:不同文件的文件頭是不一樣的,所以在合并的時候…

數組中出現次數超過一半的數

數組中有一個數字出現的次數超過數組長度的一半&#xff0c;請找出這個數字。 你可以假設數組是非空的&#xff0c;并且給定的數組總是存在多數元素。 示例 1: 輸入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 輸出: 2限制&#xff1a; 1 < 數組長度 < 50000class Solution { pub…

中國寒龍反網絡病毒聯盟核心小組:官方公告,近期本站將會發布各種編程技術視頻教程,詳情請點擊我們的以下公告!...

大家好&#xff0c;我是中國寒反網絡病毒聯盟官方客服&#xff01; 近期&#xff0c;本站將全面升級&#xff0c;本站發布各種編程視頻教程&#xff0c;包括C,c#以及VB&#xff0c;VB.net&#xff0c;E&#xff0c;等相關編程語言入門視頻教程&#xff0c;每天會定期更新視頻教…

javascript學習-原生javascript的小特效(多個運動效果整理)

以下代碼就不詳細解析了&#xff0c;在我之前的多個運動效果中已經解析好多次了&#xff0c;重復的地方這里就不說明了&#xff0c;有興趣的童鞋可以去看看之前的文章《原生javascript的小特效》 <!DOCTYPE HTML> <html lang"en-US"> <head> <m…

linux在指定目錄多個文件中搜索關鍵字

find 文件目錄 -name *.* -exec grep xxx {} -n\;# -n顯示行號find 文件目錄 -name *.* | xargs grep xxx -ngrep xxx 文件目錄 -Rngrep xxx find 文件目錄 -name *.*

$ npm install opencv ? 你試試?! 在windows環境下,使用node.js調用opencv攻略

博主之前寫過一篇文章《html5與EmguCV前后端實現——人臉識別篇》&#xff0c;敘述的是opencv和C#的故事。最近在公司服務器上更新了一套nodejs環境&#xff0c;早就聽聞npm上有opencv模塊&#xff0c;便欲部署之。然而opencv的部署似乎從來都不會那么順利...... 找模塊上https…

android學習——GestureDetector.OnGestureListener 詳解

Android Touch Screen 與傳統Click Touch Screen不同&#xff0c;會有一些手勢(Gesture)&#xff0c;例如Fling&#xff0c;Scroll等等。這些Gesture會使用戶體驗大大提升。Android中的Gesture識別(detector)是通過GestureDetector.OnGestureListener接口實現的。 首先&#xf…

關于安卓一鍵分享的,急求幫助!

問題描述現在要做一個項目&#xff0c;設置里面點擊一個按鈕就可以分享&#xff0c;有三個分享平臺&#xff0c;新浪微博&#xff0c;微信和微信朋友圈現在的問題是我要在三個平臺分享的內容不同&#xff0c;在新浪微博中分享的是一段文字敘述和一個網頁鏈接&#xff1b;而在微…

和可被 K 整除的子數組

給定一個整數數組 A&#xff0c;返回其中元素之和可被 K 整除的&#xff08;連續、非空&#xff09;子數組的數目。 示例&#xff1a; 輸入&#xff1a;A [4,5,0,-2,-3,1], K 5 輸出&#xff1a;7 解釋&#xff1a; 有 7 個子數組滿足其元素之和可被 K 5 整除&#xff1a;…

前端進階路線圖

CSS不能編程&#xff1f;用Less、Sass、Stylus、甚至直接用 Absurd&#xff0c;框架除了Bootstrap還有很多。JS寫多了很麻煩&#xff1f;jQuery。移動開發&#xff1f;Zepto.js。結構不好&#xff1f;找框架&#xff0c;Backbone.js是MVC&#xff0c;AngularJS和Ember.js是MVVM…

流媒體直播服務LSS

流媒體直播服務LSS posted on 2014-10-22 11:23 實驗室 閱讀(...) 評論(...) 編輯 收藏 轉載于:https://www.cnblogs.com/labs/p/4042641.html

Win7安裝vs2010失敗

提示&#xff1a; --------------------------------------------------------------------------------------------------------------------------------------- 解決方法&#xff1a;開始運行中regedit打開注冊表找到HKEY_LOCAL_MACHINE/System/CurrentControlSet/Control …

調光設備術語:調光曲線(轉)

源&#xff1a;調光設備術語&#xff1a;調光曲線 核心提示&#xff1a;調光曲線是調光設備重要的參數之一&#xff0c;它直接影響到了燈光輸出的效果&#xff0c;是數字化調光設備性能的體現。上面這句話包含了三點內容&#xff0c;我們逐條解析。 調光曲線是調光設備重要的參…

深入淺出理解QTimeLine類

網上找了下QTimeLIne類的介紹&#xff0c;要么就是代碼一貼自己看去&#xff0c;要么就是說不到重點&#xff0c;正巧自己項目遇到這個類&#xff0c;在這里寫一下&#xff0c;給需要的同學看下。 因為我最近需要有動畫方面配合時間間隔觸發QGraphicsView框架的需求&#xff0c…

0909編譯原理

1.編譯原理學什么&#xff1f; 編譯原理是計算機專業的一門重要專業課&#xff0c;旨在介紹編譯程序構造的一般原理和基本方法。內容包括語言和文法、詞法分析、語法分析、語法制導翻譯、中間代碼生成、存儲管理、代碼優化和目標代碼生成。 2.為什么學編譯原理&#xff1f; 這門…

何為動態綁定(轉)

動態綁定只是叫法不同&#xff0c;你可以理解為多態&#xff01;例如&#xff0c;有一個抽像fruit水果父類&#xff0c;其中定義了一個方法抽像eat方法&#xff0c;而apple繼承fruit并實現fruit的eat方法&#xff0c;而banana繼承fruit并實現fruit的eat方法&#xff0c;外部調用…

繼承與多態

第十七講 A&#xff09;構造方法的重載&#xff1a;只需看參數即可。如果想在一個構造方法中調用另外一個構造方法&#xff0c;那么可以用this()的方式調用&#xff0c;this()括號中的參數表示目標構造方法的參數。this()必須要作為構造方法的第一條語句。 B&#xff09;繼承&a…