2014年8月12日 星期二

函數(_arrayShift):陣列偏移

在某些情況中,我們會需要把陣列的數值做偏移的動作。而這個偏移指的是什麼呢?簡單的用 Excel 做了個示意圖,希望幫助你了解。我要把原陣列的數值如下圖所示的那樣,讓每個位置的值,往右移動 1 格,這就是我在這裡說的陣列偏移。以下圖的示範,這是偏移了 1 格,有的時候,我們可能需要偏移不同的格數。



因為我在 MultiCharts 內建的陣列處理函數中,似乎沒找到這樣的功能,所以就自己做了用來把一維陣列數值做偏移動作的函數。先看看這樣做出來的效果,如下程式碼做測試。我先把一個指定大小為20格的一維陣列,填上數值 1~10(藍字),然後使用自建函數 _arrayShift 把 陣列test 往下偏移推後 1格,並且 print 出來比較原陣列與新陣列的數值內容差異。

得到這個結果:原陣列 1~9 格的值,被放到 2~10格去了,而原本第1格的數值則保持不動。



最後,就是這個用來對一維陣列做偏移動作的函數程式碼(函數名稱 _arrayShift(A),參數A:被處理陣列名稱。類型:簡單),至於你要怎麼應用,那就不關我的事啦 XD
input:arrayName[n](NumericArrayRef);

var:j(0),a_last(500),top(500);

a_last= array_getmaxindex(arrayName);

for j= a_last downto 2 begin
 top= minlist(j, a_last);
 arrayName[top]= arrayName[j-1];
end;