【问题标题】:Create secondary hashtables for fast search of values创建辅助哈希表以快速搜索值
【发布时间】:2015-11-15 20:36:14
【问题描述】:

我有一个如下格式的 hashref:

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

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

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

【问题讨论】:

  • 您能否指出预期的条目数以及如何填充散列?恕我直言,它可能会影响最佳选择。
  • @Andrzej A. Filip:3-4K 条目。你是什​​么意思我如何填充哈希?
  • 如何用 4K 条目填充空哈希?顺便说一句,您是否考虑过使用“内存中”SQLite 数据库? [可能对 4K 条目有意义]

标签: perl hashtable hashref


【解决方案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";

【讨论】:

    猜你喜欢
    • 2016-08-29
    • 2018-10-01
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    • 2013-04-13
    • 2014-04-07
    相关资源
    最近更新 更多