VB中如何宣告及使用多維陣列,多層陣列及動態陣列

2021-05-06 10:26:28 字數 4775 閱讀 4855

宣告固定大小的陣列  

有三種方法宣告固定大小的陣列,用哪一種方法取決於陣列應有的有效範圍:    

建立公用陣列,在模組的宣告段用   public   語句宣告陣列。  

建立模組級陣列,在模組的宣告段用   private   語句宣告陣列。  

建立區域性陣列,在過程中用   private   語句宣告陣列。    

設定上下界  

宣告陣列時,在陣列名之後跟乙個用括號括起來的上界。上界不得超過   long   資料型別的範圍(-2,147,483,648   到   2,147,483,647)。例如,下列陣列宣告可出現在模組的宣告段:  

dim   counters   (14)   as   integer                   '15   個元素。  

dim   sums   (20)   as   double                         '21   個元素。  

為建立公用陣列,直接用   public   取代   dim。  

public   counters   (14)   as   integer  

public   sums   (20)   as   double  

在過程之中同樣的宣告使用   dim:  

dim   counters   (14)   as   integer  

dim   sums   (20)   as   double  

第乙個宣告建立了乙個有   15   個元素的陣列,其索引號從   0   到   14   。第二個宣告建立了乙個有   21   個元素的陣列,其索引號從   0   到   20   。預設的下界為   0。  

為了規定下界,用關鍵字   to   顯式提供下界(為   long   資料型別):  

dim   counters   (1   to   15)   as   integer  

dim   sums   (100   to   120)   as   string  

在前述宣告中,counters   的索引值範圍從   1   到   15,而   sums   的索引值範圍從   100   到   200。  

包含其它陣列的陣列

有可能建立   variant   資料型別陣列,並與不同資料型別的陣列共居一處。以下**建立兩個陣列,乙個包含整數,而另乙個包含   字串。然後宣告第三個   variant   陣列,並將整數和字串陣列放置其中:  

private   sub   command1_click   ()  

dim   intx   as   integer       '宣告計數器變數。  

'宣告並放置整數陣列。  

dim   countersa   (5)   as   integer  

for   intx   =   0   to   4  

countersa   (intx)   =   5  

next   intx  

'宣告並放置字串陣列。  

dim   countersb   (5)   as   string  

for   intx   =   0   to   4  

countersb   (intx)   =   "hello"  

next   intx  

dim   arrx   (2)   as   variant                   '宣告擁有兩個成員的新陣列。  

arrx   (1)   =   countersa   ()             '將其它陣列移居到陣列。  

arrx   (2)   =   countersb   ()  

msgbox   arrx   (1)   (2)                   '顯示每乙個陣列的成員。  

msgbox   arrx   (2)   (3)  

end   sub

多維陣列

有時需要追蹤記錄陣列中的相關資訊。例如,為了追蹤記錄計算機螢幕上的每乙個畫素,需要引用它的   x、y   座標。這時應該用多維陣列儲存值。  

可用   visual   basic   宣告多維陣列。例如,下面的語句宣告了乙個過程內的   10   ×   10   的二維陣列。  

static   matrixa   (9,   9)   as   double  

可用顯式下界來宣告兩個維數或兩個維數中的任何乙個:  

static   matrixa   (1   to   10,   1   to   10)   as   double  

可以將所有這些推廣到二維以上的陣列。例如:  

dim   multid   (3,   1   to   10,   1   to   15)  

這個宣告建立了三維陣列,大小為   4   ×   10   ×   15。元素總數為三個維數的乘積,為   600。  

注意   在增加陣列的維數時,陣列所佔的儲存空間會大幅度增加,所以要慎用多維陣列。使用   variant   陣列時更要格外小心,因為他們需要更大的儲存空間。    

用迴圈運算元組  

可以用   for   迴圈巢狀有效的處理多維陣列。例如,在   matrixa   中基於每個元素在陣列中的位置為其賦值:  

dim   i   as   integer,   j   as   integer  

static   matrixa(1   to   10,   1   to   10)   as   double  

for   i   =   1   to   10  

for   j   =   1   to   10  

matrixa   (i,   j)   =   i   *   10   +   j  

next   j  

next   i  

要建立動態陣列,請按照以下步驟執行:

(如果希望陣列為公用陣列,則)用   public   語句宣告陣列,或者,(如果希望陣列為模組級,則)在模組級用   dim   語句宣告陣列,或者(如果希望陣列為區域性陣列,則)在過程中用   static   或   dim   語句宣告陣列。給陣列附以乙個空維數表,這樣就將陣列宣告為動態陣列。    

dim   dynarray   ()  

用   redim   語句分配實際的元素個數。    

redim   dynarray   (x   +   1)  

redim   語句只能出現在過程中。與   dim   語句、static   語句不同,redim   語句是乙個可執行語句,由於這一語句,應用程式在執行時執行乙個操作。  

redim   語句支援這樣的語法,它與固定陣列中使用的語法相同。對於每一維數,每個   redim   語句都能改變元素數目以及上下界。但是,陣列的維數不能改變。  

redim   dynarray   (4   to   12)  

例如,用第一次宣告在模組級所建立的動態陣列   matrix1:  

dim   matrix1   ()   as   integer  

然後,在過程中給陣列分配空間:  

sub   calcvaluesnow   ()  

.  

.  

.  

redim   matrix1   (19,   29)  

end   sub  

這裡的   redim   語句給   matrix   分配乙個   20   ×   30   的整數矩陣(元素總大小為   600)。還有乙個辦法,用變數設定動態陣列的邊界:  

redim   matrix1   (x,   y)  

注意   您可以將字串賦值給大小可變的位元組陣列。乙個位元組陣列也可以被賦值給乙個可變長的字串。一定要注意字串中的位元組數會隨平台而變化。同乙個字串在   unicode   平台上的位元組數是它在非   unicode   平台上的兩倍。  

保留動態陣列的內容  

每次執行   redim   語句時,當前儲存在陣列中的值都會全部丟失。visual   basi   重新將陣列元素的值置為   empty(對   variant   陣列)、置為   0(對   numeric   陣列)、置為   零長度字串(對   string   陣列)或者置為   nothing(對於物件的陣列)。  

在為新資料準備陣列,或者要縮減陣列大小以節省記憶體時,這樣做是非常有用的。有時希望改變陣列大小又不丟失陣列中的資料。使用具有   preserve   關鍵字的   redim   語句就可做到這點。例如,使用   ubound   函式引用上界,使陣列擴大、增加乙個元素,而現有元素的值並未丟失:  

redim   preserve   dynarray   (ubound   (dynarray)   +   1)  

在用   preserve   關鍵字時,只能改變多維陣列中最後一維的上界;如果改變了其它維或最後一維的下界,那麼執行時就會出錯。所以可這樣程式設計:  

redim   preserve   matrix   (10,   ubound   (matrix,   2)   +   1)  

而不可這樣程式設計:  

redim   preserve   matrix   (ubound   (matrix,   1)   +   1,   10)  

'

VB中如何宣告及使用多維陣列,多層陣列及動態陣列

宣告固定大小的陣列 有三種方法宣告固定大小的陣列,用哪一種方法取決於陣列應有的有效範圍 建立公用陣列,在模組的宣告段用 public 語句宣告陣列。建立模組級陣列,在模組的宣告段用 private 語句宣告陣列。建立區域性陣列,在過程中用 private 語句宣告陣列。設定上下界 宣告陣列時,在陣列...

陣列的宣告及使用

什麼是陣列?同一種型別資料的集合,也就是乙個容器。運算的時候有很多資料參與運算,那麼首先需要做的是什麼.不是如何運算而是如何儲存這些資料以便於後期的運算,那麼陣列就是一種用於儲存資料的方式,能存資料的地方我們稱之為容器 陣列的本質 就是去申請一串連續的記憶體空間,這個物件arr就指向這個這串記憶體單...

gRPC 如何使用python表示多維陣列

在使用grpc作為遠端呼叫框架時,如何使用python來表示多維陣列呢?grpc中定義proto檔案時,有乙個引數是repeated,用來表示重複的資料型別,使用這個引數可以表示list型別。如下,我想表示乙個三維陣列,這個陣列表示的是乙個三通道rgb彩色影象,proto檔案如下所示,proto檔案...