如何動(dòng)態(tài)分配數(shù)組大小?
來源:新能源網(wǎng)
時(shí)間:2024-08-17 13:28:11
熱度:
如何動(dòng)態(tài)分配數(shù)組大???【專家解說】:ReDim 語句示例
該示例使用 ReDim 語句為動(dòng)態(tài)數(shù)組變量分配和重分配存儲(chǔ)空間。假設(shè) Option base 是 1。 Dim MyAr
【專家解說】:ReDim 語句示例
該示例使用 ReDim 語句為動(dòng)態(tài)數(shù)組變量分配和重分配存儲(chǔ)空間。假設(shè) Option base 是 1。
Dim MyArray() As Integer '聲明動(dòng)態(tài)數(shù)組。
Redim MyArray(5) '分配 5 個(gè)元素。
For I = 1 To 5 '循環(huán) 5 次。
MyArray(I) = I '初始化數(shù)組。
Next I
下一條語句重定義該數(shù)組的大小,并清除其中的元素。
Redim MyArray(10) '大小重定為 10 個(gè)元素。
For I = 1 To 10 '循環(huán) 10 次。
MyArray(I) = I '初始化數(shù)組。
Next I
下面的語句重定義該數(shù)組的大小,但沒有清除其中的元素。
Redim Preserve MyArray(15) '大小重定為 15 個(gè)元素。
(更詳細(xì)的信息請(qǐng)見下面:)
動(dòng)態(tài)數(shù)組
數(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á)到最大,然后再抹去那些不必要的元素。但是,如果過度使用這種方法,會(huì)導(dǎo)致內(nèi)存的操作環(huán)境變慢。
要?jiǎng)?chuàng)建動(dòng)態(tài)數(shù)組,請(qǐng)按照以下步驟執(zhí)行:
(如果希望數(shù)組為公用數(shù)組,則)用 Public 語句聲明數(shù)組,或者,(如果希望數(shù)組為模塊級(jí),則)在模塊級(jí)用 Dim 語句聲明數(shù)組,或者(如果希望數(shù)組為局部數(shù)組,則)在過程中用 Static 或 Dim 語句聲明數(shù)組。給數(shù)組附以一個(gè)空維數(shù)表,這樣就將數(shù)組聲明為動(dòng)態(tài)數(shù)組。
Dim DynArray ()
用 ReDim 語句分配實(shí)際的元素個(gè)數(shù)。
ReDim DynArray (X + 1)
ReDim 語句只能出現(xiàn)在過程中。與 Dim 語句、Static 語句不同,ReDim 語句是一個(gè)可執(zhí)行語句,由于這一語句,應(yīng)用程序在運(yùn)行時(shí)執(zhí)行一個(gè)操作。
ReDim 語句支持這樣的語法,它與固定數(shù)組中使用的語法相同。對(duì)于每一維數(shù),每個(gè) ReDim 語句都能改變?cè)財(cái)?shù)目以及上下界。但是,數(shù)組的維數(shù)不能改變。
ReDim DynArray (4 to 12)
例如,用第一次聲明在模塊級(jí)所建立的動(dòng)態(tài)數(shù)組 Matrix1:
Dim Matrix1 () As Integer
然后,在過程中給數(shù)組分配空間:
Sub CalcValuesNow ()
.
.
.
ReDim Matrix1 (19, 29)
End Sub
這里的 ReDim 語句給 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 語句時(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 語句就可做到這點(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)
-
一種燃料既有高熱值又有低熱值嗎?高熱值和低熱值實(shí)際意義和作用是什么?它的大小有什么決定?2024-08-17
-
風(fēng)力發(fā)電機(jī)組都有哪些方式可以控制其從空氣中吸收能量的大小,分別如何實(shí)現(xiàn)2024-08-17
-
哪位能幫我把照片修改成寬度要求在160像素以內(nèi),高度在210像素以內(nèi),大小15kb到45kb之間,格式j(luò)pg2024-08-17
-
通常狀況下液化石油氣與空氣密度大小關(guān)系2024-08-17
-
小區(qū)安裝無負(fù)壓供水設(shè)備,設(shè)備大小和水泵臺(tái)數(shù)功率,怎么計(jì)算,根據(jù)什么計(jì)算,或者有沒有這方面的書籍學(xué)習(xí)2024-08-17
-
小區(qū)安裝無負(fù)壓供水設(shè)備,設(shè)備大小和水泵臺(tái)數(shù)功率,怎么計(jì)算,根據(jù)什么計(jì)算?2024-08-17
-
誰能提供嘉興五縣兩區(qū)的所有工業(yè)園區(qū)、經(jīng)濟(jì)開發(fā)區(qū)的信息?要詳細(xì)的,包括位置大小等!重酬?。。?!2024-08-17
-
鍋爐的引風(fēng)機(jī)怎么配置?根據(jù)哪些參數(shù)來確定風(fēng)機(jī)的大小2024-08-17
-
水電站的大小是按照什么來劃分的?2024-08-17
-
熱水器火苗大小不均勻,煤氣味重,著了之后有響聲之后熄滅 請(qǐng)問是什么原因?謝謝!2024-08-17
-
微小型水輪機(jī),水輪發(fā)電機(jī)選型 水頭:8-10m; 流量:160立方米/小時(shí); 管徑大?。?50mm 請(qǐng)問怎樣選型?2024-08-17
-
無論大小發(fā)電廠都是有發(fā)電機(jī)組構(gòu)成的嗎?2024-08-17
-
熱水器煤氣換天然氣只換了燃燒氣排,調(diào)節(jié)氣量大小開關(guān)沒換,使用時(shí)不是火大就是不著火。請(qǐng)個(gè)位老師指點(diǎn)一下,謝2024-08-17
-
高一 物理 括號(hào)四 重力勢(shì)能還能判斷大小嗎2024-08-17
-
天然氣熱水器耗氣量 和水量設(shè)定大小溫度高低有關(guān)系嗎 成什么關(guān)系???2024-08-17