2015-08-21 241 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";