Recherche…


Remarques

Un grand nombre des procédures intrinsèques disponibles ont des types d'argument communs. Par exemple:

  • un argument logique MASK qui sélectionne les éléments des tableaux d'entrée à traiter
  • un argument scalaire entier KIND qui détermine le type de résultat de la fonction
  • un argument entier DIM pour une fonction de réduction qui contrôle la dimension sur laquelle la réduction est effectuée

Utilisation de PACK pour sélectionner des éléments répondant à une condition

La fonction pack intrinsèque emballe un tableau dans un vecteur, en sélectionnant des éléments basés sur un masque donné. La fonction a deux formes

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

(c'est-à-dire que l'argument vector est facultatif).

Dans les deux cas, array est un tableau et un mask de type logique conforme à array (un scalaire ou un tableau de même forme).

Dans le premier cas, le résultat est rang-1 tableau de paramètres de type et de type de array le nombre d'éléments étant le nombre d'éléments vrais dans le masque.

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

les valeurs positive_values sont le tableau [2, 3, 5] .

Avec l'argument vector rank-1, le résultat est maintenant la taille du vector (qui doit avoir au moins autant d'éléments que de valeurs vraies dans le mask .

L'effet avec vector est de renvoyer ce tableau avec les éléments initiaux de ce tableau écrasés par les éléments masqués du array . Par exemple

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

les [2,3,5,40,50] positive_values sont le tableau [2,3,5,40,50] .

Il convient de noter que, quelle que soit la forme du array arguments array le résultat est toujours un tableau de rang 1.


En plus de sélectionner les éléments d'un tableau répondant à une condition de masquage, il est souvent utile de déterminer les indices pour lesquels la condition de masquage est remplie. Cet idiome commun peut être exprimé comme

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

résultant en des indices étant le tableau [1,3,5] .



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow