Семь уроков по PostScript

         

Операторы для работы со словарями



Операторы для работы со словарями

Создать пустой словарь ёмкостью N элементов можно с помощью оператора dict. Его синтаксис:

число_элементов dict à словарь

Этот пустой словарь помещается в стек операндов. Аргумент число_элементов не может быть отрицательным.

Оператор currentdict выполняет обратное действие – помещает копию текущего словаря в стек операндов.

Синтаксис: - currentdict à словарь

Оператор countdictstack пересчитывает число словарей, находящихся в стеке словарей, и помещает это число в стек операндов.

Синтаксис: - countdictstack à int

Оператор cleardictstack извлекает из стека все словари, кроме постоянных.

Синтаксис: - cleardictstack à -

Для замены или внесения нового элемента в словарь используется оператор put. На самом деле этот оператор полиморфен и позволяет также заменять элементы массивов и строк.

Синтаксис:

массив индекс значение put à -

словарь ключ значение put à -

строка индекс целое put à -

Если первый операнд массив или строка, то второй рассматривается как индекс, значение которого лежит в диапазоне от 0 до n-1 (где n – длина строки или массива). Элемент с этим индексом замещается третьим операндом.



Если первый операнд — массив, то второй — рассматривается как ключ и в словаре сохраняется пара ключ--значение, если данный ключ не будет найден, либо замещается только значение, если пара с таким ключом уже существует. Конечно, при создании нового входа в словарь интерпретатор проверяет наличие там свободного места и выдаёт сообщение об ошибке dictfull, если число входов уже исчерпано.

Пример.

/mydict 10 dict def

mydict /A 65 put

Обратное действие выполняет оператор get. С его помощью можно получить значение элемента массива, строки или по ключу найти соответствующее значение в словаре.

Синтаксис:

массив индекс put à значение

словарь ключ put à значение

строка индекс put à целое

Пример.

/abc [1 2 3] def

currentdict /abc get à [1 2 3]

Со словарём очень интересно работает также оператор forall. Ранее его действие рассматривалось только по отношению к массиву, но он, как и два предыдущих оператора, работает и со словарями, и со строками.

Синтаксис:

массив proc forall à -

словарь proc forall à -

строка proc forall à -

Если первый операнд — словарь, то forall помещает ключ и значение в стек операндов и выполняет заданную процедуру (proc) над каждой парой ключ--значение в словаре. Если процедура пустая "{}", то таким образом все пары из словаря просто переписываются в стек операндов.



Содержание раздела