在perl中反转多值哈希

syk*_*ker 5 perl

我有一个看起来像这样的哈希:

{ bmw      => { id => 1, color => brown } }
{ mercedes => { id => 2, color => black } }
Run Code Online (Sandbox Code Playgroud)

我想在perl中反转这个哈希,这样我就得到了id => name_of_car的映射.我是否需要以某种方式使用反向功能?

注意:我总是可以遍历原始哈希并在新哈希中相应地分配键和值,我想知道是否有一种更流畅的方式.

小智 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";
}
Run Code Online (Sandbox Code Playgroud)

输出:

$ ./silly.pl 
1 bmw
2 mercedes