使用 PACK 選擇滿足條件的元素
內在的 pack
函式將陣列打包到一個向量中,根據給定的掩碼選擇元素。該功能有兩種形式
PACK(array, mask)
PACK(array, mask, vector)
(也就是說,vector
引數是可選的)。
在這兩種情況下,array
都是一個陣列,並且是邏輯型別的 mask
,並且與 array
(標量或相同形狀的陣列)一致。
在第一種情況下,結果是 array
的型別和型別引數的 rank-1 陣列,元素的數量是掩碼中真實元素的數量。
integer, allocatable::positive_values(:)
integer::values(5) = [2, -1, 3, -2, 5]
positive_values = PACK(values, values>0)
結果 positive_values
是陣列 [2, 3, 5]
。
當 vector
rank-1 引數出現時,結果現在是 vector
的大小(whcih 必須至少具有與 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]
。