Szukaj…


Uwagi

Wiele dostępnych wewnętrznych procedur ma wspólne typy argumentów. Na przykład:

  • logiczny argument MASK który wybiera elementy tablic wejściowych do przetworzenia
  • całkowity argument skalarny KIND który określa rodzaj wyniku funkcji
  • argument liczby całkowitej DIM dla funkcji redukcji, która kontroluje wymiar, w stosunku do którego przeprowadzana jest redukcja

Używanie PAKI, aby wybrać elementy spełniające warunek

Funkcja pack wewnętrznego pakuje tablicę do wektora, wybierając elementy na podstawie danej maski. Funkcja ma dwie formy

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

(to znaczy argument vector jest opcjonalny).

W obu przypadkach array jest tablicą i mask typu logicznego i zgodną z array (skalarem lub tablicą o tym samym kształcie).

W pierwszym przypadku wynikiem jest tablica typu 1 i parametry typu array przy czym liczba elementów jest liczbą elementów rzeczywistych w masce.

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

powoduje, że positive_values są tablicą [2, 3, 5] .

Przy obecnym argumencie vector rangi 1 wynikiem jest teraz rozmiar vector (który musi mieć co najmniej tyle elementów, ile jest prawdziwych wartości w mask .

Efektem vector jest zwrócenie tej tablicy z początkowymi elementami tej tablicy zastąpionymi przez zamaskowane elementy array . Na przykład

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

powoduje, że wartości positive_values są tablicą [2,3,5,40,50] .

Należy zauważyć, że niezależnie od kształtu array argumentów wynikiem jest zawsze tablica rangi 1.


Oprócz wyboru elementów tablicy spełniających warunek maskowania często przydatne jest określenie wskaźników, dla których warunek maskowania jest spełniony. Ten wspólny idiom można wyrazić jako

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

co powoduje, że indices są tablicą [1,3,5] .



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow