perl hash问题
1#!/bin/usr/perl-w2usestrict;34my%hash;5$hash{1}->{1}=0;6$hash{1}->{2}=0;7$hash{1}->{...
1 #!/bin/usr/perl -w
2 use strict;
3
4 my %hash;
5 $hash{1}->{1}=0;
6 $hash{1}->{2}=0;
7 $hash{1}->{3}=0;
8
9 for my $key (keys %{$hash{1}}){
10 print "$key\n";
11 }
12
为什么结果是1 2 3,
3怎么没有把1.2覆盖掉呢?hash不是一一对应码?
hash{1}相当于key,怎么能指向3个value hash。 展开
2 use strict;
3
4 my %hash;
5 $hash{1}->{1}=0;
6 $hash{1}->{2}=0;
7 $hash{1}->{3}=0;
8
9 for my $key (keys %{$hash{1}}){
10 print "$key\n";
11 }
12
为什么结果是1 2 3,
3怎么没有把1.2覆盖掉呢?hash不是一一对应码?
hash{1}相当于key,怎么能指向3个value hash。 展开
2个回答
展开全部
你所定义的%hash是一个值为哈希引用的哈希。
%hash的key为1,而值为{1 => 0, 2 => 0, 3 => 0}。这个花括号很重要,它表示这是一个匿名哈希,所以$hash{1}的值其实就是{1 => 0, 2 => 0, 3 => 0},对于哈希引用来说,%{}是用来解引用的,也就是得到了一个(1 => 0, 2 => 0, 3 => 0)哈希,注意这里是圆括号。所以你调用keys函数的时候,返回的是(1,2,3)这个列表,打印出来的时候自然就是1,2,3了。
这里面有一些perl的数据结构的知识,总之,在perl里面,引用是个非常强大的东西,[],{}是用来生成匿名数组和哈希的,并返回它们的引用,而@[], %{}是用来解引用,得到里面的数据。可以用来构建复杂的数据结构,你可以去看看《perl技术内幕》,在这部分讲得不错。
my %hash = (
'1' => {
'1' => '0',
'2' => '0',
'3' => '0',
}
);
%hash的key为1,而值为{1 => 0, 2 => 0, 3 => 0}。这个花括号很重要,它表示这是一个匿名哈希,所以$hash{1}的值其实就是{1 => 0, 2 => 0, 3 => 0},对于哈希引用来说,%{}是用来解引用的,也就是得到了一个(1 => 0, 2 => 0, 3 => 0)哈希,注意这里是圆括号。所以你调用keys函数的时候,返回的是(1,2,3)这个列表,打印出来的时候自然就是1,2,3了。
这里面有一些perl的数据结构的知识,总之,在perl里面,引用是个非常强大的东西,[],{}是用来生成匿名数组和哈希的,并返回它们的引用,而@[], %{}是用来解引用,得到里面的数据。可以用来构建复杂的数据结构,你可以去看看《perl技术内幕》,在这部分讲得不错。
my %hash = (
'1' => {
'1' => '0',
'2' => '0',
'3' => '0',
}
);
展开全部
这个其实数据结构是这样的
my %hash = (
'1' => {
'1' => '0',
'2' => '0',
'3' => '0',
}
);
%hash 是一个哈希,$hash{1} 是hash中key为1时的value,而这个value是一个匿名哈希的引用
所以%{$hash{1}} 是相当于那个匿名hash ,在这个匿名哈希中有3个key1,2,3,打印出来当然是3个了。
my %hash = (
'1' => {
'1' => '0',
'2' => '0',
'3' => '0',
}
);
%hash 是一个哈希,$hash{1} 是hash中key为1时的value,而这个value是一个匿名哈希的引用
所以%{$hash{1}} 是相当于那个匿名hash ,在这个匿名哈希中有3个key1,2,3,打印出来当然是3个了。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询