Fortran
Intrinsische Verfahren
Suche…
Bemerkungen
Viele der verfügbaren intrinsischen Prozeduren haben gemeinsame Argumenttypen. Zum Beispiel:
- ein logisches Argument
MASKdas Elemente von Eingabearrays zur Verarbeitung auswählt - ein ganzzahliges Skalarargument
KINDdas die Art des Funktionsergebnisses bestimmt - ein ganzzahliges Argument
DIMfü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] .