Perl语法:散列HashReferences的HashReferences

时间:2011-12-29 08:09:29

标签: perl

我放弃了将此用于我的程序的想法,但我很感兴趣,因为我从来没有找到如何做到这一点的答案。基本上,如果我构造类似下面的内容(请原谅我的格式,如果下面的内容不正常):

  • A = |num_key => hashref_a|
  • hashref_aa = |string_keys => hashref_b|的哈希引用,
  • hashref_bb = |num_key, num_value|的哈希引用。

如您所见,第一级是一个散列,其中键是数字,其值是对另一个散列的引用,而散列又是一个散列,其键是与值相关的字符串,这些值又是散列引用(但这些散列是哈希值)只是键和数字)。

现在,我如何访问b(整个键列表或只是相应键的值),第一个哈希值为num_key,而第一个哈希值为string_key第二个哈希。

我真的希望我能够清楚地传达这个问题!

3 个答案:

答案 0 :(得分:3)

如果我已正确理解您的请求:

my %hash = ( num_key => { string_keys => { num_key => 1.234 } } );

或者:

my %hash_b = ( num_key => 1.234 );
my %hash_a = ( string_keys => \%hash_b );
my %hash_z = ( num_keys => \%hash_a );

嗯......在编辑问题之后,我想你是在询问如何访问这些值,而不是如何构建它们。

my $value = $hash{$num_key}->{$string_key}->{num_key};

这里有点不对劲;我使用了$num_key但是给定数据的唯一有效值是'num_key';类似于$string_key和'string_keys'。不过,箭头是符号的关键。

答案 1 :(得分:2)

my %hash = ( 3 => { "hello" => { 18 => 583 } } );

print $hash{3}->{"hello"}->{18};
# ==> 583

编辑我看到@JonathanLeffler做了一个非常相同的答案,但我将把我的作为他的补充,作为他解释的可运行的演示。

答案 2 :(得分:0)

%hash = (
   one => { a => 10, b => 20 },
   two => { c => 30, d => 40 }
);

&function(\%hash);

sub function {
   my $hash = shift;

   $hash->{two}->{d} = 50;   # changes 'd'
}

你可以用哈希哈希的哈希来深入到你想要的深处。希望有所帮助...