我放弃了将此用于我的程序的想法,但我很感兴趣,因为我从来没有找到如何做到这一点的答案。基本上,如果我构造类似下面的内容(请原谅我的格式,如果下面的内容不正常):
A = |num_key => hashref_a|
,hashref_a
是a = |string_keys => hashref_b|
的哈希引用,hashref_b
是b = |num_key, num_value|
的哈希引用。如您所见,第一级是一个散列,其中键是数字,其值是对另一个散列的引用,而散列又是一个散列,其键是与值相关的字符串,这些值又是散列引用(但这些散列是哈希值)只是键和数字)。
现在,我如何访问b
(整个键列表或只是相应键的值),第一个哈希值为num_key
,而第一个哈希值为string_key
第二个哈希。
我真的希望我能够清楚地传达这个问题!
答案 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'
}
你可以用哈希哈希的哈希来深入到你想要的深处。希望有所帮助...