PERL: БИБЛИОТЕКА ПРОГРАММИСТА


PERL: БИБЛИОТЕКА ПРОГРАММИСТА - стр. 130


В третьем решении использован всего один хэш для хранения информации о том, сколько раз встретился тот или иной элемент. Записав элементы обоих массивов в хэш, мы последовательно перебираем его ключи. Каждый ключ авто­матически попадает в объединение. Ключи, с которыми ассоциировано значе­ние 2, присутствуют в обоих массивах и потому заносятся в массив пересече-


4.9. Присоединение массива   131

ния. Ключи с ассоциированным значением 1 встречаются лишь в одном из двух массивов и заносятся в массив разности. В отличие от исходного решения, поря­док элементов в выходных массивах не совпадает с порядком элементов вход­ных массивов.

В последнем решении, как и в предыдущем, используется всего один хэш с ко­личеством экземпляров каждого элемента Однако на этот раз реализация постро­ена на массиве в блоке @{      }.

Мы вычисляем не простую, а симметричную разность. Эти термины происхо­дят из теории множеств. Симметричная разность представляет собой набор всех элементов, являющихся членами либо @А, либо @В, но не обоих сразу. Простая разность — набор всех элементов @А, отсутствующих в §В (см. рецепт 4,7).

> Смотри также---------------------------------------------------------------------------------------------

Аналогичное применение хэшей продемонстрировано в рецептах 4.7 и 4.8.

4.9. Присоединение массива

Проблема

Требуется объединить два массива, дописав все элементы одного из них в конец другого.

Решение

Воспользуйтесь функцией push:

#  push
push(@ARRAY1,   @ARRAY2),

Комментарий

Функция push оптимизирована для записи списка в конец массива. Два массива также можно объединить посредством сглаживания (flattening) списков Perl, од­нако в этом случае выполняется намного больше операций копирования, чем при использовании push:

@ARRAY1  =  (©ARRAY1,   @ARRAY2)

Ниже показан пример практического использования push-

©members = ( Time Flies ), ©initiates = ( An , Arrow ), push(@>members,   ©initiates),

#  ©members содержит элементы  ( Time ,     Flies ,     An ,     Arrow )




- Начало -  - Назад -  - Вперед -