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


Автор: vitaly1979 6.6.2006, 11:16
как сделать сабж?
например такого

Код

$H{'i1'}{'j1'}="string11";
$H{'i1'}{'j2'}="string12";
$H{'i2'}{'j1'}="string21";
$H{'i2'}{'j2'}="string22";
 

Автор: vitaly1979 6.6.2006, 11:51
Код

@keys=keys(%H);
foreach $key (@keys)
{
        @keys2=keys(%{$H{$key}});
        foreach $key2 (@keys2)
        {
                $str=$H{$key}{$key2};
                print "\$H{$key}{$key2}=$H{$key}{$key2}\n";
        }
}

спасибо всем уже сам  smile  

Автор: sharq 7.6.2006, 09:58
vitaly1979, посмотри модуль Data::Dumper,
очень полезный и удобный (например, при тестирование).

 smile  

Автор: vitaly1979 7.6.2006, 19:16
sharq, гляну
вот еще вопросик
при обнулении хэша так %H={}
появляется указатель на пустой хэш при переборе ключей 1 уровня
он мешает однако
проблема решается определением %H=() 
но почему так? 

Автор: korob2001 8.6.2006, 02:24
Цитата(vitaly1979 @  7.6.2006,  16:16 Найти цитируемый пост)
но почему так?

Потому что, хеш это список ключей и значений, где каждый ключь ассоциирован со своим значением.

Когда ты присваиваешь пустой список (), то ты обнуляешь весь хеш, в случае же с фигурными скобками, ты просто создаёшь ключь, который является ссылкой на анонимный массив, причём значение остаётся не определённым. Получается примерно такая структура.
Код
%H = ( HASH(0x2251e8) => undef );

Массив и ассоциативный массив (хэш), это списки и для того, что бы их обнулить или присвоить им список значений, нужно присвоить им список (для обнуления пустой, т.е. ()), а не ссылку на анонимный массив или хеш.
 

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