![]() |
|
Модераторы: ginnie, korob2001 |
![]()
|
|
| loginn |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 22.12.2010 Репутация: нет Всего: нет |
Есть динамический массив. Каждый элемент массива содержит имя ключа следующего по иерархии хэша.
Нужно перебрать этот массив, и на каждой итерации проверить, существует ли такой ключ... Если проверять только первый уровень иерархии, то все легко и просто. Но если появляются второй и и т.д. то не понятно, как на первой итерации обращаться к ключу первой иерархии, на второй - к ключу второй иерархии и т.д. %hash{level1_key}{level2_key}{level3_key}...{levelN_key} т.е. мне непонятно, как сделать так, чтобы в зависимости номера итерации обращаться к ключу соответствующей глубины. итерация 0: if $hash{$array[0]} { } итерация 1: if ($hash{$array[0]}{$array[1]}) { } итерация 2: if ($hash{$array[0]}{$array[1]}{$array[2]}) { } и т.д. итерация 2: if ($hash{$array[0]}{$array[1]}{$array[2]}...{$array[N]}){ } т.е. на каждой итерации изменяется не значение аргумента оператора if, а сам аргумент. Вот голову ломаю, как воплотить это в жизнь... Заранее спасибо всем, кто поделится дельными советами! |
|||
|
||||
| DurRandir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 335 Регистрация: 27.9.2009 Репутация: нет Всего: 17 |
Сделать рекурсивную функцию, в которую передавать аргументами имя ключа и ссылку на текущей уровень, т.е.
Это сообщение отредактировал(а) DurRandir - 29.8.2011, 00:57 |
|||
|
||||
| loginn |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 22.12.2010 Репутация: нет Всего: нет |
Я хотел примерно что-то типо этого:
Вот только можно ли без использования eval сделать что-то подобное? |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 1 Всего: 40 |
# perl -le '$a->{aa}->{bb}->{cc}->{dd} = 1; sub AA { my ( $hash, @ary ) = @_; return 1 unless (@ary); return exists $hash->{$ary[0]} ? AA($hash->{shift @ary}, @ary) : 0 } print AA($a, qw(aa bb cc))'
1 # |
|||
|
||||
| loginn |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 22.12.2010 Репутация: нет Всего: нет |
ок. всем спасибо. разобрался. |
|||
|
||||
![]()
|
| Правила форума "Perl: Системное программирование" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |