PACK
copyright

green dotPACK

書式 PACK(ARRAY,MASK[,VECTOR])
機能 MASKに従って、配列ARRAYを1次元配列にする。
たとえば、配列の要素で0でないものを集めた配列を作成することができる。
配列要素の順序に従って、結果の1次元配列のi番目(i=1,2,…,t)の要素は、 MASKのi番目の真である要素に対応するARRAYの要素とする。
VECTORを指定し、その大きさnがn<tであるとき、i=t+1,…,nに対して 結果のi番目の要素の値は、VECTOR(i)とする。
引数
ARRAY任意の型で配列
MASK 論理型でARRAYと同じ形状またはスカラ
VECTOR
(省略可能)
ARRAYと同じ型、種別型パラメタで、形状は1次元配列でMASK中の真である 要素と同数の要素をもたなければならない。
MASKがスカラであって値が真のとき、VECTORは少なくともARRAYと 同数の要素をもたなければならない。
戻り値 型、種別パラメタは引数ARRAYと同じで1次元配列である。 VECTORを指定した場合、結果の大きさはVECTORと同じで、VECTORを省略した 場合、結果の大きさはMASK中の真である要素の個数である。ただし、 MASKがスカラで値が真のとき、結果の大きさはARRAYの大きさとする。

green dotサンプルプログラム

(1)で配列aの要素が1, 2, 3, 0, 0, 0, 4の中で0でない数値を配列bに集める。
(2)で配列aの中で0でない数値を配列bに集め、残りの要素は、配列vの値を使う。
    INTEGER,DIMENSION(7) :: a
    LOGICAL,DIMENSION(7) :: m
    INTEGER,DIMENSION(4) :: b
    INTEGER,DIMENSION(6) :: v,c
    a=(/1, 2, 3, 0, 0, 0, 4/)
    v=(/11, 22, 33, 44, 55, 66/)
    m=(a/=0)
    b=PACK(a,m);   WRITE(*,*) b          !(1)
    c=PACK(a,m,v); WRITE(*,*) c          !(2)

実行例
(1)では、mは(T,T,T,F,F,F,T)になり、aは(1,2,3,0,0,0,4)なので 1,2,3,4が出力される。 1 2 3 4 1 2 3 4 55 66
line-end