我有一个看起来像这样的哈希:
{ bmw => { id => 1, color => brown } }
{ mercedes => { id => 2, color => black } }
我想在perl中反转这个哈希,以便我得到一个id =>的映射。 name_of_car。我是否需要以某种方式使用反向功能?
注意:我总是可以遍历原始哈希并在新哈希中相应地分配键和值,我想知道是否有一种更流畅的方式。
答案 0 :(得分:6)
不需要光滑的方式:
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
答案 1 :(得分:2)
你发布的内容不是有效的perl,但我认为我理解你的意思。一个光滑的方法是使用hash slice和地图。
my %hash = (
bmw => { id => 1, color => 'brown' },
mercedes => { id => 2, color => 'black' },
);
my %new_hash;
@new_hash{ map { $_->{id} } values %hash } = keys %hash;