宣告固定大小的陣列
有三種方法宣告固定大小的陣列,用哪一種方法取決於陣列應有的有效範圍:
建立公用陣列,在模組的宣告段用 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檔案...