Fortran
Intrinsische Verfahren
Suche…
Bemerkungen
Viele der verfügbaren intrinsischen Prozeduren haben gemeinsame Argumenttypen. Zum Beispiel:
- ein logisches Argument
MASK
das Elemente von Eingabearrays zur Verarbeitung auswählt - ein ganzzahliges Skalarargument
KIND
das die Art des Funktionsergebnisses bestimmt - ein ganzzahliges Argument
DIM
für eine Reduktionsfunktion, das die Dimension steuert, über die die Reduktion ausgeführt wird
Verwenden von PACK zum Auswählen von Elementen, die eine Bedingung erfüllen
Die intrinsische pack
packt ein Array in einen Vektor und wählt Elemente basierend auf einer gegebenen Maske aus. Die Funktion hat zwei Formen
PACK(array, mask)
PACK(array, mask, vector)
(Das vector
ist also optional).
In beiden Fällen ist array
ein Array und eine mask
mit logischem Typ und mit array
(entweder ein Skalar oder ein Array mit derselben Form) kompatibel.
Im ersten Fall ist das Ergebnis ein Rang-1-Array von Typ- und Typparametern des array
wobei die Anzahl der Elemente die Anzahl der wahren Elemente in der Maske ist.
integer, allocatable :: positive_values(:)
integer :: values(5) = [2, -1, 3, -2, 5]
positive_values = PACK(values, values>0)
führt dazu, dass positive_values
das Array sind [2, 3, 5]
.
Wenn das Argument vector
Rank-1 vorhanden ist, ist das Ergebnis jetzt die Größe des vector
(wobei mindestens zwei Elemente so viele Elemente enthalten müssen, wie echte Werte in der mask
.
Der Effekt von vector
besteht darin, dieses Array mit den ursprünglichen Elementen dieses Arrays zurückzugeben, die von den maskierten Elementen des array
überschrieben werden. Zum Beispiel
integer, allocatable :: positive_values(:)
integer :: values(5) = [2, -1, 3, -2, 5]
positive_values = PACK(values, values>0, [10,20,30,40,50])
ergibt positive_values
Werte als Array [2,3,5,40,50]
.
Es ist zu beachten, dass das Ergebnis unabhängig von der Form des Argument- array
immer ein Rang-1-Array ist.
Neben der Auswahl der Elemente eines Arrays, die eine Maskierungsbedingung erfüllen, ist es häufig nützlich, die Indizes zu bestimmen, für die die Maskierungsbedingung erfüllt ist. Diese gebräuchliche Redewendung kann ausgedrückt werden als
integer, allocatable :: indices(:)
integer i
indices = PACK([(i, i=1,5)], [2, -1, 3, -2, 5]>0)
was dazu führt, dass indices
das Array sind [1,3,5]
.