Показать полную графическую версию : PERL многомерный хэш. Вывести первый ключ
Допустим у нас есть многомерный %hash
my %hash;
$hash{car}{old}=1200;
$hash{car}{new}=1300;
$hash{car}{sold}=1000;
$hash{ball}{old}=120;
$hash{ball}{new}=0;
$hash{ball}{sold}=1000;
нужно получить ключ-1 ('ball') по паре ключ-2=значение ('old'=120). можно ли это сделать короткой записью, без перебора всех ключей?
Порядок подхэшей (old, new, sold) по умолчанию не сохраняется.
my %hash;
$hash{'car'}{'old'}=1200;
$hash{'car'}{'new'}=1300;
$hash{'car'}{'sold'}=1000;
$hash{'ball'}{'old'}=120;
$hash{'ball'}{'new'}=0;
$hash{'ball'}{'sold'}=1000;
for (keys %{$hash{'ball'}}) { print "$_\n" }
** конечная задача была уже решена год с лишним назад, и, вроде, там решил по-другому организовывать данные. так что решение носит только характер "а интересно как/возможно ли"
это понятно, но интересовало другое. я хотел достать ключ-1, зная ключ-2 и его значение
вообще получается такой алгоритм:
my $found_key;
foreach my $key(keys %hash) {
if ($hash{$key}{old} eq 120) {
$found_key = $key;
break;
}
}
я искал вариант как раз без перебора всех ключ-1.
Во первых не break, а last, во вторых такое лучше сделать grep'ом:
my $found_key = (grep { $hash{$_}{'old'} eq 120 } (keys %hash))[0];
Во первых не break, а last, во вторых такое лучше сделать grep'ом:
Код:
my $found_key = (grep { $hash{$_}{'old'} eq 120 } (keys %hash))[0]; »
вот, то что нужно было =) не вкурсе, быстрее ли работать будет, но то что запись минималистичней - точно, а это уже радует =)
p.s. возьму на заметку!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.