在perl中反转多值哈希

时间:2010-07-20 00:45:52

标签: perl

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

{ bmw      => { id => 1, color => brown } }
{ mercedes => { id => 2, color => black } }

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

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

2 个答案:

答案 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;