Perl:切片哈希数组
Perl: slicing an array of hashes
下面代码的输出总是空的。不确定我做错了什么,希望得到任何帮助。如何获取哈希数组中特定哈希中的键值?
use strict;
use warnings;
my %dot1 = ('a'=>1,'b'=>2);
my %dot2 = ('a'=>3,'b'=>4);
my %dot3 = ('a'=>5,'b'=>6);
my %dot4 = ('a'=>7,'b'=>8);
my @array = (%dot1,%dot2,%dot3,%dot4);
my %x = $array[2];
my $y = $x->{'a'};
print "$y \n";
如果你想要一个散列引用数组,你需要明确说明。
my @array = (\%dot1, \%dot2, \%dot3, \%dot4);
my %x = %{$array[2]};
my $y = $x{a};
print "$y\n";
您要做的是将对您的散列的引用添加到您的 @array
,否则 perl 将在列表上下文中计算散列。
my @array = (\%dot1,\%dot2,\%dot3,\%dot4);
my $x = $array[2];
my $y = $x->{'a'};
print "$y \n";
您没有哈希数组。您有一个看起来像散列的数组,其中键 a
和 b
将分别出现四次,顺序相对随机。
print Dumper \@array;
$VAR1 = [
'a',
1,
'b',
2,
'a',
3,
'b',
4,
'a',
5,
'b',
6,
'a',
7,
'b',
8
];
之后,您正在使用 $x->{a}
,这是从哈希引用 $x
中获取密钥 a
的语法,但您只声明了一个哈希 %a
.这反过来又打破了,因为你给它一个奇数大小的单值列表。
相反,将对散列的引用添加到您的数组中。这样您将获得多级数据结构而不是平面列表。然后使 x
变量成为标量 $x
.
my %dot1 = ('a'=>1,'b'=>2);
my %dot2 = ('a'=>3,'b'=>4);
my %dot3 = ('a'=>5,'b'=>6);
my %dot4 = ('a'=>7,'b'=>8);
my @array = (\%dot1,\%dot2,\%dot3,\%dot4); # here
my $x = $array[2]; # here
my $y = $x->{'a'};
print "$y \n";
这将打印 5
.
您应该阅读 perlref and perlreftut 中的数据结构。
下面代码的输出总是空的。不确定我做错了什么,希望得到任何帮助。如何获取哈希数组中特定哈希中的键值?
use strict;
use warnings;
my %dot1 = ('a'=>1,'b'=>2);
my %dot2 = ('a'=>3,'b'=>4);
my %dot3 = ('a'=>5,'b'=>6);
my %dot4 = ('a'=>7,'b'=>8);
my @array = (%dot1,%dot2,%dot3,%dot4);
my %x = $array[2];
my $y = $x->{'a'};
print "$y \n";
如果你想要一个散列引用数组,你需要明确说明。
my @array = (\%dot1, \%dot2, \%dot3, \%dot4);
my %x = %{$array[2]};
my $y = $x{a};
print "$y\n";
您要做的是将对您的散列的引用添加到您的 @array
,否则 perl 将在列表上下文中计算散列。
my @array = (\%dot1,\%dot2,\%dot3,\%dot4);
my $x = $array[2];
my $y = $x->{'a'};
print "$y \n";
您没有哈希数组。您有一个看起来像散列的数组,其中键 a
和 b
将分别出现四次,顺序相对随机。
print Dumper \@array;
$VAR1 = [
'a',
1,
'b',
2,
'a',
3,
'b',
4,
'a',
5,
'b',
6,
'a',
7,
'b',
8
];
之后,您正在使用 $x->{a}
,这是从哈希引用 $x
中获取密钥 a
的语法,但您只声明了一个哈希 %a
.这反过来又打破了,因为你给它一个奇数大小的单值列表。
相反,将对散列的引用添加到您的数组中。这样您将获得多级数据结构而不是平面列表。然后使 x
变量成为标量 $x
.
my %dot1 = ('a'=>1,'b'=>2);
my %dot2 = ('a'=>3,'b'=>4);
my %dot3 = ('a'=>5,'b'=>6);
my %dot4 = ('a'=>7,'b'=>8);
my @array = (\%dot1,\%dot2,\%dot3,\%dot4); # here
my $x = $array[2]; # here
my $y = $x->{'a'};
print "$y \n";
这将打印 5
.
您应该阅读 perlref and perlreftut 中的数据结构。