數(shù)組到底應(yīng)該有多大才合適,有時(shí)可能不得而知。所以希望能夠在運(yùn)行時(shí)具有改變數(shù)組大小的能力。
動(dòng)態(tài)數(shù)組就可以在任何時(shí)候改變大小。在 visual basic 中,動(dòng)態(tài)數(shù)組最靈活、最方便,有助于有效管理內(nèi)存。例如,可短時(shí)間使用一個(gè)大數(shù)組,然后,在不使用這個(gè)數(shù)組時(shí),將內(nèi)存空間釋放給系統(tǒng)。
如果不用動(dòng)態(tài)數(shù)組,就要聲明一個(gè)數(shù)組,它的大小盡可能達(dá)到最大,然后再抹去那些不必要的元素。但是,如果過(guò)度使用這種方法,會(huì)導(dǎo)致內(nèi)存的操作環(huán)境變慢。
要?jiǎng)?chuàng)建動(dòng)態(tài)數(shù)組,請(qǐng)按照以下步驟執(zhí)行:
(如果希望數(shù)組為公用數(shù)組,則)用 public 語(yǔ)句聲明數(shù)組,或者,(如果希望數(shù)組為模塊級(jí),則)在模塊級(jí)用 dim 語(yǔ)句聲明數(shù)組,或者(如果希望數(shù)組為局部數(shù)組,則)在過(guò)程中用 static 或 dim 語(yǔ)句聲明數(shù)組。給數(shù)組附以一個(gè)空維數(shù)表,這樣就將數(shù)組聲明為動(dòng)態(tài)數(shù)組。
dim dynarray ()
用 redim 語(yǔ)句分配實(shí)際的元素個(gè)數(shù)。
redim dynarray (x + 1)
redim 語(yǔ)句只能出現(xiàn)在過(guò)程中。與 dim 語(yǔ)句、static 語(yǔ)句不同,redim 語(yǔ)句是一個(gè)可執(zhí)行語(yǔ)句,由于這一語(yǔ)句,應(yīng)用程序在運(yùn)行時(shí)執(zhí)行一個(gè)操作。
redim 語(yǔ)句支持這樣的語(yǔ)法,它與固定數(shù)組中使用的語(yǔ)法相同。對(duì)于每一維數(shù),每個(gè) redim 語(yǔ)句都能改變?cè)財(cái)?shù)目以及上下界。但是,數(shù)組的維數(shù)不能改變。
redim dynarray (4 to 12)
例如,用第一次聲明在模塊級(jí)所建立的動(dòng)態(tài)數(shù)組 matrix1:
dim matrix1 () as integer
然后,在過(guò)程中給數(shù)組分配空間:
sub calcvaluesnow ()
.
.
.
redim matrix1 (19, 29)
end sub
這里的 redim 語(yǔ)句給 matrix 分配一個(gè) 20 × 30 的整數(shù)矩陣(元素總大小為 600)。還有一個(gè)辦法,用變量設(shè)置動(dòng)態(tài)數(shù)組的邊界:
redim matrix1 (x, y)
注意 您可以將字符串賦值給大小可變的字節(jié)數(shù)組。一個(gè)字節(jié)數(shù)組也可以被賦值給一個(gè)可變長(zhǎng)的字符串。一定要注意字符串中的字節(jié)數(shù)會(huì)隨平臺(tái)而變化。同一個(gè)字符串在 unicode 平臺(tái)上的字節(jié)數(shù)是它在非 unicode 平臺(tái)上的兩倍。
保留動(dòng)態(tài)數(shù)組的內(nèi)容
每次執(zhí)行 redim 語(yǔ)句時(shí),當(dāng)前存儲(chǔ)在數(shù)組中的值都會(huì)全部丟失。visual basi 重新將數(shù)組元素的值置為 empty(對(duì) variant 數(shù)組)、置為 0(對(duì) numeric 數(shù)組)、置為 零長(zhǎng)度字符串(對(duì) string 數(shù)組)或者置為 nothing(對(duì)于對(duì)象的數(shù)組)。
在為新數(shù)據(jù)準(zhǔn)備數(shù)組,或者要縮減數(shù)組大小以節(jié)省內(nèi)存時(shí),這樣做是非常有用的。有時(shí)希望改變數(shù)組大小又不丟失數(shù)組中的數(shù)據(jù)。使用具有 preserve 關(guān)鍵字的 redim 語(yǔ)句就可做到這點(diǎn)。例如,使用 ubound 函數(shù)引用上界,使數(shù)組擴(kuò)大、增加一個(gè)元素,而現(xiàn)有元素的值并未丟失:
redim preserve dynarray (ubound (dynarray) + 1)
在用 preserve 關(guān)鍵字時(shí),只能改變多維數(shù)組中最后一維的上界;如果改變了其它維或最后一維的下界,那么運(yùn)行時(shí)就會(huì)出錯(cuò)。所以可這樣編程:
redim preserve matrix (10, ubound (matrix, 2) + 1)
而不可這樣編程:
redim preserve matrix (ubound (matrix, 1) + 1, 10)
詳細(xì)信息 關(guān)于動(dòng)態(tài)數(shù)組的更詳細(xì)信息,請(qǐng)參閱語(yǔ)言參考中的“redim 函數(shù)”。關(guān)于對(duì)象數(shù)組,請(qǐng)參閱“用對(duì)象編程”。