1. 概述
帆軟作為報表工具,在擴展展現的時候,經常會用到陣列的知識。我們可以將帆軟報表中每一個可以擴展的儲存格都作為一個陣列來考慮進行計算。而我們選擇將擴展儲存格列表顯示的時候,相當於直接用“,”逗號做分割來展現了陣列的各個元素。
很多的初學者對陣列的運算存在一些錯誤認識,這裏科普一下。
2. 陣列的定義
所謂陣列,是相同資料類型的元素按一定順序排列的集合。
若將有限個類型相同的變數的集合命名,那麼這個名稱為陣列名。
組成陣列的各個變數稱為陣列的分量,也稱為陣列的元素,有時也稱為下標變數。
用於區分陣列的各個元素的數字編號稱為下標。
陣列是在程式設計中,為了處理方便, 把具有相同類型的若干變數按有序的形式組織起來的一種形式。這些按序排列的同類資料元件的集合稱為陣列。
3. 陣列的分類
陣列,就是元素的集合,按行、列進行排列。陣列分為一維陣列和多維陣列。
單行或單列的陣列,我們稱為一維陣列。
多行多列(含 2 行 2 列)的陣列是多維陣列或二維陣列。
4. 陣列的運算
一維陣列和二維陣列的運算規律
1)單值 x 與陣列 arry 運算 執行 x 與 arry 中每一個元素分別運算並傳回結果,也就是與 arry 本身行列、尺寸一樣的結果。 比如:2*{1,2;3,4;5,6},執行 2*1、2*2、2*3、2*4、2*5、2*6 運算,並傳回 3 行 2 列的二維陣列結果{2,4;6,8;10,12},如下圖所示:
陣列中行和列分別用逗號、分號來間隔。逗號表示行,行之間的關係比較緊密,用逗號分割;列之間,關係相對比較疏遠一點,用分號分割。
又比如:"A"&{"B","C"}傳回{"AB","AC"}。"A"={"B","A","C"}傳回{FALSE,TRUE,FALSE}
也就是說,陣列是可以與單獨字元或數值進行比較、合併、運算等處理的。
2)同向一維陣列運算 執行 arry1 與arry2 對應位置的元素分別運算並傳回結果。要求 arry1 與 arry2 尺寸必須相同,否則多餘部分傳回 #N/A 錯誤。
比如: {1;2;3}*{4;5;6} 傳回{4;10;18}; {1,2,3,4}*{4,5,6} 傳回 {4,10,18,#N/A},如下圖所示:
3)異向一維陣列運算 arry1 的每一元素與 arry2 的每一元素分別運算並傳回結果,得到兩個陣列的行數*列數個元素,也就是 M 行陣列與 N 列陣列運算結果為 M*N 的矩陣陣列。 比如:{1;2;3}*{4,5,6,7,8},執行1*4、1*5、1*6、1*7、1*8、2*4、2*5、2*6、2*7、2*8、3*4、3*5、3*6、3*7、3*8,傳回{4,5,6,7,8;8,10,12,14,16;12,15,18,21,24}
4)一維陣列與二維陣列運算 二維陣列其中一個方向與一維陣列同向同尺寸,比如 M*N 的二維陣列與M行或者N列的陣列運算,在同向的運算類似同向一維陣列之間的位置對應,在異向的運算則類似單值與陣列之間的一一運算。超出尺寸範圍都傳回錯誤值。
例:{1,2,3,4}*{1,2,3,4,5;6,7,8,9,10} 即 4 列一維陣列與 2 行 5 列二維陣列運算,列方向上兩個陣列運算按位置一一對應的,不足部分用 #N/A 補齊,行方向上則是一對多的運算。 即:1*1,2*2,3*3,4*4,#N/A *5;1*6,2*7,3*8,4*9,#N/A *10;傳回 {1,4,9,16,#N/A;6,14,24,36,#N/A}。
5)二維陣列之間運算 要求尺寸相同,並執行相同位置元素一一對應的運算,超出尺寸部分傳回錯誤。
例:{1,2;3,4}*{1,2,3;4,5,6;7,8,9}執行1*1,2*2,3*4,4*5,其餘部分用 #N/A 補齊,傳回={1,4,#N/A;12,20,#N/A;#N/A,#N/A,#N/A}