У меня есть хеш, который похож на это:
{ bmw => { id => 1, color => brown } }
{ mercedes => { id => 2, color => black } }
Я хочу инвертировать этот хеш в жемчуге так, чтобы я просто получил отображение идентификатора => name_of_car. Я должен использовать обратную функцию так или иначе?
Примечание: Я могу всегда выполнять итерации через исходный хеш и присваивать ключи и значения соответственно в новом хеше, гайка, которую я хотел знать, был ли дождевик путь.
Не нужен простой способ:
my %h = (
bmw => { id => 1, color => "brown" } ,
mercedes => { id => 2, color => "black" }
);
my %j = map { ($h{$_}{id} => $_) } keys %h;
for (keys %j) {
print "$_ $j{$_}\n";
}
Вывод:
$ ./silly.pl 1 bmw 2 mercedes
То, что вы опубликовали, недействительно на Perl, но я думаю, что понимаю ваше значение. Один из простых способов сделать это - использовать хэш-фрагмент и карту.
my %hash = (
bmw => { id => 1, color => 'brown' },
mercedes => { id => 2, color => 'black' },
);
my %new_hash;
@new_hash{ map { $_->{id} } values %hash } = keys %hash;