Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Как записать и потом прочитать массив?


Автор: Suppir 17.7.2010, 08:44
Привет!

Есть хеш хешей, который я создаю следующим образом:

$hash{$key}{id} = $id;
$hash{$key}{name} = $name;
$hash{$key}{code} = $code;

Необходимо в хеш добавить $hash{$key}{date}, который должен содержать массив дат (обычно 3-4 шутки для каждого $id).
Дата представляет собой простую строку, вроде "01/01/2010" 

1) Как добавить в $hash{$key}{date} массив дат 
2) Как потом обратиться к этому массиву (сделать перебор и вывести все элементы массива)

Заранее спасибо ответившим!

Автор: arto 17.7.2010, 09:09
1. $hash{$key}{date} = [ qw( 01/01/2010 02/02/2010 ) ];
2. print join "\n",@{ $hash{$key}{date} }

Автор: Suppir 17.7.2010, 09:29
arto, а можно как-то по отдельности добавлять? Нужно что-то вроде Push(), потому что мне не известны все даты сразу.

Автор: ming 17.7.2010, 10:26
Suppir, да можно, конечно.

перед добавлением первой даты инициализируешь пустой анонимный массив  -  
$hash{$key}{date} = [];

а затем просто добавляешь в него элементы как в обычный массив - 
push @{ $hash{$key}{date} }, "01/01/2010";
push @{ $hash{$key}{date} }, "02/02/2009";
....
и т.д.

Автор: sir_nuf_nuf 19.7.2010, 10:07
Цитата(ming @  17.7.2010,  10:26 Найти цитируемый пост)
перед добавлением первой даты инициализируешь пустой анонимный массив  -  
$hash{$key}{date} = [];

Это не обязательно. Perl сам создаст пустой массив при первом операторе push. Называется autovivification.


Так что можно сразу делать
Код

push @{ $hash{$key}{date} }, "01/01/2010";
push @{ $hash{$key}{date} }, "02/02/2009";

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)