1

我有以下格式的 hashref:

{  
   introduction_to_systems => {  
                                 writer => "John",  
                                 owner => "Jim"  
   },  
   management_recipies => {  
                                 writer => "Jane",  
                                 owner => "Jim"  
   },  
etc  
}  

我的问题是这个哈希不是很方便。我还希望能够轻松找到所有属于“吉姆”或“约翰”的东西都是作者。

基本上我需要这个哈希表的 2 个倒数。
在 perl 中执行此操作的最有效方法是什么?

4

1 回答 1

1

因为每个所有者和作者都可以拥有和编写许多东西,所以您必须使用一系列书籍作为值进行散列。您可以通过多种方式做到这一点。例如:

#!/usr/bin/env perl
use strict;
use warnings;

my $books = {
    introduction_to_systems => {
        writer => "John",
        owner  => "Jim"
    },
    management_recipies => {
        writer => "Jane",
        owner  => "Jim"
    },
};

my ( %owns, %wrote );
for my $book ( keys %$books ) {
    my $rec = $books->{$book};
    push @{ $owns{ $rec->{owner} } },   $book;
    push @{ $wrote{ $rec->{writer} } }, $book;
}

print "Jim owns @{$owns{Jim}}\n";
print "John wrote @{$wrote{John}}\n";
于 2015-08-21T20:12:53.103 回答