サーチ…


備考

利用可能な組み込みプロシージャの多くは、引数型が共通しています。例えば:

  • 処理される入力配列の要素を選択する論理的な引数MASK
  • 関数の結果の種類を決定する整数スカラー引数KIND
  • 縮小が実行される次元を制御する縮小関数の整数引数DIM

PACKを使用して条件を満たす要素を選択する

intrinsic pack関数は、配列をベクトルにパックし、与えられたマスクに基づいて要素を選択します。関数には2つの形式があります

PACK(array, mask)
PACK(array, mask, vector)

(つまり、 vector引数はオプションです)。

どちらの場合も、 arrayは配列であり、論理型のmaskで、 array (スカラーまたは同じ形状の配列)に従います。

最初のケースでは、結果はrankの1型arrayであり、要素の数はマスク内の真の要素の数であるarray型パラメータです。

integer, allocatable :: positive_values(:)
integer :: values(5) = [2, -1, 3, -2, 5]
positive_values = PACK(values, values>0)

positive_valuesが配列[2, 3, 5] 2、3、5 [2, 3, 5]ます。

vector rank-1引数があれば、結果はvectorのサイズになります( mask真の値以上の要素が少なくとも必要です)。

効果vectorのマスキングされた要素によって上書きその配列の最初の要素とその配列を返すことであるarray 。例えば

integer, allocatable :: positive_values(:)
integer :: values(5) = [2, -1, 3, -2, 5]
positive_values = PACK(values, values>0, [10,20,30,40,50])

positive_valuesが配列[2,3,5,40,50]ます。

引数array形状にかかわらず、結果は常にランク1の配列になります。


マスキング条件を満たす配列の要素を選択することに加えて、マスキング条件が満たされる指標を決定することはしばしば有用である。この共通のイディオムは、次のように表すことができます。

integer, allocatable :: indices(:)
integer i
indices = PACK([(i, i=1,5)], [2, -1, 3, -2, 5]>0)

indicesは配列[1,3,5]ます。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow