Zoeken…


Opmerkingen

Veel van de beschikbare intrinsieke procedures hebben argumenttypen gemeen. Bijvoorbeeld:

  • een logisch argument MASK dat elementen van MASK selecteert die moeten worden verwerkt
  • een geheel getal scalair argument KIND dat het soort functieresultaat bepaalt
  • een geheel getalargument DIM voor een verkleiningsfunctie die de dimensie regelt waarover de verkleining wordt uitgevoerd

PACK gebruiken om elementen te selecteren die aan een voorwaarde voldoen

De intrinsieke pack verpakt een array in een vector, waarbij elementen worden geselecteerd op basis van een bepaald masker. De functie heeft twee vormen

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

(dat wil zeggen, het vector is optioneel).

In beide gevallen is array een array en een mask van het logische type en compatibel met array (een scalaire of een array met dezelfde vorm).

In het eerste geval is het resultaat rang-1 reeks van type en type parameters van array waarbij het aantal elementen het aantal echte elementen in het masker is.

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

resulteert in positive_values die de array [2, 3, 5] .

Met het vector rang-1 argument aanwezig is het resultaat nu de grootte van de vector (die minstens evenveel elementen moet hebben als er echte waarden in het mask .

Het effect met vector is om die array terug te geven met de initiële elementen van die array overschreven door de gemaskeerde elementen van de array . Bijvoorbeeld

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

resulteert in positive_values [2,3,5,40,50] die de array zijn [2,3,5,40,50] .

Opgemerkt moet worden dat, ongeacht de vorm van de argumentarray array het resultaat altijd een array-1 array is.


Naast het selecteren van de elementen van een array die aan een maskeervoorwaarde voldoet, is het vaak nuttig om de indices te bepalen waarvoor aan de maskeervoorwaarde wordt voldaan. Dit gemeenschappelijke idioom kan worden uitgedrukt als

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

resulterend in indices die de array zijn [1,3,5] .



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow