Dec 22 Wed 2010 12:51 [A] AutoIt!! 二維陣列 分享: 1. 名稱定義 Dim $Arr[維度1][維度2][維度3]...[維度N] 在說明多維陣列時,先以上為例定義出二個名詞出來。 (1) 維度:以上為例,$Arr 陣列維度即為 N 維。故一維陣列為 Dim $Arr[維度1];二維陣列為 Dim $Arr[維度1][維度2];依此類推。 (2) 元素:這是陣列裡面可以實際存取的單位,以一維陣列 Dim $Arr[2] = [1,2] 為例,實際上可以存取的元素是 $Arr[0] 與 $Arr[1];而二維陣列 $Arr[2][3] = [ [1,2,3],[4,5,6]] 2. 多維陣列之宣告 在某些情況下,我們使用到的陣列可能不是一維而是二維甚至是三維陣列。比如說,要存的是一張 bmp 圖檔的資訊。一張 bmp 圖檔假設高度為 $H,寬度為 $W,則共有 $H * $W 個點。然而每個點還有 R、G、B 三個向量所組成,所以宣告時可能會變成這樣: Dim $W=800, $H=600 Dim $R[$W][$H],$G[$W][$H],$B[$W][$H] 也或者是直接宣告成一個三維陣列 Dim $W=800, $H=600 Dim $RGB[$W][$H][3] 這樣調用時,可以假設 $RGB[100][100][0] 為位於點 (100,100) 之 R 資訊;$RGB[100][100][1] 為位於點 (100,100) 之g 資訊;$RGB[100][100][2] 為位於點 (100,100) 之B 資訊。 至於初值設定的話可以這麼設 Dim $X[2][3] = [ [1,2,3],[4,5,6] ] Dim $Y[2][3][4] = [ [ [1,2,3,4], [5,6,7,8], [9,10,11,12] ] , _ [ [13,14,15,16], [17,18,19,20], [21,22,23,24] ] ] 3. 使用多維陣列 假設二陣列已這麼宣告 Dim $Arr[3][2] 宣告時我沒給它初值,日後要設值給它的時候可以這麼做 $Arr[0][0] = "文字00" $Arr[0][1] = "文字01" $Arr[1][0] = "文字10" $Arr[1][1] = "文字11" $Arr[2][0] = "文字20" $Arr[2][1] = "文字21" 而若通常陣列大時,也是用迴圈方式去跑,二維陣列以上通常都會配合讀檔方式把數值讀進來,讀檔日後再說明。現在示範用 loop 依序遞增二維陣列之值 Dim $x = 5, $y=6 Dim $Arr[$x][$y] Dim $msg ; 設定陣列內容 For $i=0 To $x-1 For $j=0 To $y-1 $Arr[$i][$j] = $i*$y+$j $msg &= $Arr[$i][$j] & @TAB Next $msg &= @CRLF Next ; 顯示陣列內容 MsgBox(4096, "內容", $msg) 上篇文章有提到,在一維陣列時,可以用 UBound 去得知陣列的大小,相同的,這也可以用來多維陣列上。假設要知道第一個維度大小時,UBound 就給它 1 (UBound($Arr, 1)) ;要知道第二個維度大小時就調用 UBound($Arr, 2)。例如: Dim $Arr[10][20] $dim1 = UBound($Arr, 1) $dim2 = UBound($Arr, 2) MsgBox(4096,"title", $dim1) ; 10 MsgBox(4096,"title", $dim2) ; 20 4. 重新設定大小 二維陣列或多維陣列要重新設定大小和一維方式一樣,但麻煩的事有些洗掉之後就不易得知哪些會保留、哪些不會保留。故若使用多維陣列,重新設定大小時,建議其元素值均需重新給過。 Dim $Arr[2][10] ReDim $Arr[4][5] 需注意的是,一開始 $Arr 就宣告成二維陣列,於是 ReDim 也一定要是二維陣列,不可是其它維度之陣列。 5. 應用例子 事實上許多線性代數的問題都要用到二維陣列,以下例子即為二維陣列之加法運算,至於減法與除法若有興趣可自行研究。 Dim $A[2][3] = [ [1,2,3],[4,5,6] ] Dim $B[2][3] = [ [7,8,9],[10,10,10] ] Dim $C[2][3] ; $C = $A + $B Dim $msg For $i=0 To UBound($A, 1)-1 For $j=0 To UBound($A, 2)-1 $C[$i][$j] = $A[$i][$j] + $B[$i][$j] $msg &= $C[$i][$j] & @TAB Next $msg &= @CRLF Next MsgBox(4096, "二維陣列內容",$msg) edisonx 發表在 痞客邦 PIXNET 迴響(0) 引用(0) 人氣(250) http://edisonx.pixnet.net/blog/post/38641037 回 · 發現好東西 autoit 這一篇文章封面 |
本站公告:〔您越需要我們,我們就越有創意〕 | 本站說明書:〔發現故鄉還有改進的地方,請來信告訴原丁們〕 |
觀察應用學習點數 :〔咱的故鄉有您的參與,會使我們有更大的發揮空間,展現更豐富精彩的學習畫面〕 | 〔期待藉由無障礙網頁設計,能讓視障小朋友更愛看書、更愛寫作且更愛學習〕:盲用電腦「心得分享」 |