Spec-Zone.ru › GNU Fortran 13

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

Описание:

Сохраняет элементы МАССИВ в массив ранга один.

Начало результирующего массива состоит из элементов, у которых МАСКА равна TRUE. Последующие позиции заполняются элементами, взятыми из ВЕКТОР.

Стандарт:

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

Класс:

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

Синтаксис:

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

Аргументы:
МАССИВ Должен быть массивом любого типа.
МАСКА Должен быть массивом типа LOGICAL и иметь тот же размер, что и МАССИВ. В качестве альтернативы, это может быть LOGICAL скаляр.
ВЕКТОР (Необязательно) должен быть массивом того же типа, что и МАССИВ, и ранга один. Если присутствует, число элементов в ВЕКТОР должно быть равно или больше числа истинных элементов в МАСКА. Если МАСКА является скалярной, число элементов в ВЕКТОР должно быть равно или больше числу элементов в МАССИВ.
Возвращаемое значение:

Результат — массив ранга один и того же типа, что и МАССИВ. Если ВЕКТОР присутствует, размер результата соответствует размеру ВЕКТОР, число TRUE значений в МАСКА в противном случае.

Пример:

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

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

Сбор ненулевых элементов из массива и добавление элементов из ВЕКТОР:

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-13.3.0/gfortran/PACK.html

Spec-Zone.ru

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