Spec-Zone.ru › GNU Fortran 14

8.212 PACK — Упаковка массива в массив ранга один

Описание:

Хранит элементы ARRAY в массиве ранга один.

Начало результирующего массива состоит из элементов, у которых MASK равно TRUE. Последующие позиции заполняются элементами из VECTOR.

Стандарт:

Fortran 90 и более поздние версии

Класс:

Функция преобразования

Синтаксис:

RESULT = PACK(ARRAY, MASK[,VECTOR])

Аргументы:
ARRAY Должен быть массивом любого типа.
MASK Должен быть массивом типа LOGICAL и того же размера, что и ARRAY. В качестве альтернативы, он может быть LOGICAL скаляром.
VECTOR (Необязательно) должен быть массивом того же типа, что и ARRAY, и ранга один. Если он присутствует, количество элементов в VECTOR должно быть равно или больше количества истинных элементов в MASK. Если MASK является скаляром, количество элементов в VECTOR должно быть равно или больше количества элементов в ARRAY.
Значение результата:

Результат — массив ранга один и того же типа, что и ARRAY. Если VECTOR присутствует, размер результата — размер VECTOR, иначе — количество TRUE значений в MASK.

Пример:

Сбор ненулевых элементов из массива:

PROGRAM test_pack_1
  INTEGER :: m(6)
  m = (/ 1, 0, 0, 0, 5, 0 /)
  WRITE(*, FMT="(6(I0, ' '))") pack(m, m /= 0)  ! "1 5"
END PROGRAM

Сбор ненулевых элементов из массива и добавление элементов из VECTOR:

PROGRAM test_pack_2
  INTEGER :: m(4)
  m = (/ 1, 0, 0, 2 /)
  ! The following results in "1 2 3 4"
  WRITE(*, FMT="(4(I0, ' '))") pack(m, m /= 0, (/ 0, 0, 3, 4 /))
END PROGRAM
См. также:

UNPACK — Разпаковка массива ранга один в массив

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-14.2.0/gfortran/PACK.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API