2015-08-21 96 views
1

,我有以下格式的hashref的二次哈希表:创建快速搜索值

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

我的问题是,这个哈希是不是很方便。我还希望能够轻松找到由“吉姆”或“约翰”拥有的作家。

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

+0

您能指出预期的条目数量以及如何填写散列吗?恕我直言,它可能会影响最佳选择。 – AnFi

+0

@Andrzej A.菲利普:3-4K条目。你是什​​么意思如何填写散列? – Jim

+0

如何用4K条目填充空散列?顺便说一句你有没有考虑过使用“内存中”的SQLite数据库? [对于4K条目可能有些意义] – AnFi

回答

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";