嗨我有一个哈希数组如下,我想访问哈希元素/元素。假设我想要打印doct1的名字,我没有得到正确的结果请帮帮我怎么打印?
@doctors = (
'doct1' => {
'name' => 'abcd',
'specialization' => 'xyz',
'city' => 'pqr'
},
'doct2' => {
'name' => 'efgh',
'specialization' => 'mno',
'city' => 'stu'
}
);
print $doctors[0]{'name'};
答案 0 :(得分:3)
阵列没有钥匙,
my @doctors = (
{
'name' => 'abcd',
'specialization' => 'xyz',
'city' => 'pqr'
},
{
'name' => 'efgh',
'specialization' => 'mno',
'city' => 'stu'
}
);
print $doctors[0]{'name'};
答案 1 :(得分:3)
你没有AoH。你有一个包含字符串和哈希引用的数组。这是一个非常糟糕的数据结构。找到正确的医生是很麻烦和低效的。
my $i = 0;
$i += 2 while $i<@doctors && $doctors[$i] ne 'doct1';
die "Not found" if $i > @doctors;
say $doctors[$i+1]{name};
如果你有一个AoH,你看起来像这样:
my @doctors = (
{
id => 'doct1',
name => 'abcd',
specialization => 'xyz',
city => 'pqr',
},
{
id => 'doct2',
name => 'efgh',
specialization => 'mno',
city => 'stu',
},
);
那会更好。
my ($doctor) = grep { $_->{id} eq 'doct1' } @doctors
or die "Not found";
say $doctor->{name};
doct1
和doct2
也可能毫无意义,而您使用0
和1
感到满意。如果是的话,
die "Not found" if @doctors < 0;
say $doctors[0]{name};
如果doct1
和doct2
没有意义,那么最干净,最有效的解决方案就是使用HoH。
my %doctors = (
doct1 => {
name => 'abcd',
specialization => 'xyz',
city => 'pqr',
},
doct2 => {
name => 'efgh',
specialization => 'mno',
city => 'stu',
},
);
代码就这么简单了:
my $doctor = $doctors{doct1}
or die "Not found";
say $doctor->{name};
答案 2 :(得分:2)
这种情况下使用Data::Dumper
是必不可少的,你实际拥有的是两个字符串和两个hashref的数组。如果您要使用Data :: Dumper将其打印出来,您会看到:
use Data::Dumper;
print Dumper \@doctors;
[
'doct1',
{
'city' => 'pqr',
'specialization' => 'xyz',
'name' => 'abcd'
},
'doct2',
{
'city' => 'stu',
'specialization' => 'mno',
'name' => 'efgh'
}
];
每个hashref都有代表医生的所有数据,前面的附加键没有任何意义。删除这些键,你将有这样的结构:
@doctors = (
{
'name' => 'abcd',
'specialization' => 'xyz',
'city' => 'pqr'
},
{
'name' => 'efgh',
'specialization' => 'mno',
'city' => 'stu'
}
);
现在您可以像预期的那样访问哈希属性:
print $doctors[0]{name};
答案 3 :(得分:0)
右手声明与数组的赋值不一致(意图)。您可能希望将其分配给哈希:
%doctors = (
'doct1' => {
'name' => 'abcd',
'specialization' => 'xyz',
'city' => 'pqr'
},
'doct2' => {
'name' => 'efgh',
'specialization' => 'mno',
'city' => 'stu'
}
);
print $doctors{'doct1'}->{'name'};
要么是这个,要么是mpapec的答案。