PERL - статьи




Вывод


Для того чтобы организовать циклы по элементам хэша, нужно использовать функцию each:

%hash = (

'шляпа' => 'серая',

'водка' => 'горькая',

'вобла' => 'вкусная');

while(($key,$value) = each %hash){

print "$key => $value\n";

};

Для перебора элементов не очень большого хеша можно воспользоваться foreach:

%hash = (

'шляпа' => 'серая',

'водка' => 'горькая',

'вобла' => 'вкусная');

foreach $key(keys %hash){

print $key,"\n"; #возвращает список ключей хеша

}

%hash = (

'шляпа' => 'серая',

'водка' => 'горькая',

'вобла' => 'вкусная');

foreach $value(values %hash){

print "$value\n"; #возвращает список значений хеша

}

Преимущество each заключается в том, что пары ключ/значение извлекаются по одной, Если хэш содержит слишком много ключей, отказ от предварительного построения полного списка существенно экономит память и время, но функция each не позволяет управлять порядком обработки пар. Перебор хэша при помощи while затрачивает мало памяти. Можно любым образом форматировать выходные данные, при этом нужны всего лишь две скалярные переменные, ключ и значение.

Цикл foreach перебирает заранее построенный список ключей, поэтому после начала цикла он ничего не знает о добавленных или удаленных ключах, ключи, добавляемые внутри цикла, не включаются автоматически в список перебираемых ключей, а удаленные внутри цикла ключи не удаляются из этого списка.

Содержимое хэша можно вывести и так:

while (@Res = each %hash){

print "$Res[0] = $Res[1]\n"

}

Вывод хэша одной строкой.

можно воспользоваться функцией map:

print map {"$_ => $hash{$_}\n"} keys %hash;

функция map позволяет работать с элементами в произвольном порядке, в этом случае создается список строк(ключ => значение), передаваемый функции print. Если сохранить хэш во временном массиве, то он будет выведен как строка:

{

my @temp = %hash;

print "@temp";

}

также можно вывести хэш и таким образом:

print "@{[%hash]}\n";




Содержание  Назад  Вперед