發現自己在發問方面能力有待加加強
我詳細說明好了
VB陣列可以重新定義使用redim
歷如 dim a() as long
redim a(100) as long 這樣我們得到101 個變數
不過我們陣列不只可以定義一維,可以定義出二維,三維---- 到n 維
例如 dim a() as long
redim a(9,9) as long 那我們得到100個變數可以使用
我的問題在於
陣列變數一定都是矩形的嗎<----(我想不出更好形容的句子了)
例如 a(0,20) 但是a(1,3)
例如第一位數是零時,第二位變數可以到20不會益位
當地一位數是1時 , 第二位變數只能到3 ,當他到 4 時就益位了
這樣就不是矩形了,是個不等的陣列,vb該如做到呢
有人回答
宣告成大矩陣就好, 這樣做很浪費記憶體,因為當某隔區域被擺上一萬個陣列
其他區域也要跟著一萬個記憶體但是只用到一兩個,不是好方法
redim a(100,10000) as long
a(30-50 , 使用7000-10000個記憶體)
a(30-100,使用100以內的記憶體)
且這些是不可預估的,必須在程式載入地圖檔時期才能決定
也是我發問這個問題的原因,因為我就是宣告了一堆矩陣覺得很浪費...才來發問的......
2006-09-08 06:00:26 · 2 個解答 · 發問者 正欽 1 in 電腦與網際網路 ➔ 程式設計
'不知道是否是你要的,以下方式是做成1個梯形陣列 Private Sub Command1_Click() Dim A(), I%, J% 'A要宣告成Variant,意指其實陣列變數也可以是陣列 ReDim A(9) For I = 1 To 10 '設 A(I - 1) = I 個" "值,再利用Split分割成陣列 A(I - 1) = Split(String(I, " ")) Randomize For J = 0 To UBound(A(I - 1)) '隨機將0~9的值放入A(I - 1)(J) A(I - 1)(J) = Int(Rnd * 10) Next '以,號為分隔印出A(I - 1)及其陣列大小 Print Join(A(I - 1), ","), UBound(A(I - 1)) NextEnd Sub'以A(0)來說它就變成有兩組A(0)(0),A(0)(1);A(1)=A(1)(0),A(1)(1),A(1)(2)....就能達成你不浪費陣列的目的,但是因為A是宣告成Variant這樣有沒有省到記憶體我就不知道了!
2006-09-08 14:36:49 補充:
戊大,我也只是猜測看看而已,有時後實在很難以文字來表達自己的問題XD
2006-09-10 00:18:32 補充:
阿哈!!戊大,妙極了Orz
2006-09-08 08:30:07 · answer #1 · answered by W.J.S. 7 · 0⤊ 0⤋
Dim aReDim a(3, 3 To 5, 100 To 101)a(0, 3, 100) = 1a(3, 5, 101) = 999Debug.Print a(0, 3, 100), a(3, 5, 101)
2006-09-08 12:02:25 補充:
怎麼不po在前一個問題補充就好了?!...@@
2006-09-08 13:21:50 補充:
W.J.S大大好像聽懂你的意思了~^^
2006-09-08 23:51:57 補充:
W.J.S大大解說後給的靈感:Dim a(10)Private Sub Command1_Click()k=Val(InputBox(”陣列索引(0~10):”))n=Val(InputBox(”a(” & k & ”)維度:”))ReDim b(n)a(k)=bFor i = 0 To 10If Not IsEmpty(a(i)) ThenDebug.Print ”a(” & i & ”)維度:” & UBound(a(i))ElseDebug.Print ”a(” & i & ”)未定義”End IfNext iEnd Sub
2006-09-09 00:09:33 補充:
W.J.S大大解說後有一些靈感...
2006-09-08 07:59:17 · answer #2 · answered by ? 7 · 0⤊ 0⤋