Arrays 在散列中的散列数组上迭代
我是Perl新手,在散列中迭代散列数组很困难。我在这里尝试了Dumper的数据结构:Arrays 在散列中的散列数组上迭代,arrays,perl,loops,hash,Arrays,Perl,Loops,Hash,我是Perl新手,在散列中迭代散列数组很困难。我在这里尝试了Dumper的数据结构: 1234 => { 'items' => [ #0 { 'k1' => { 'x1' => '123', 'x2' => '321' }, 'k2' => 'v2', 'k3' => 'v3',
1234 => {
'items' => [
#0 {
'k1' => { 'x1' => '123', 'x2' => '321' },
'k2' => 'v2',
'k3' => 'v3',
'k4' => 'v4'
},
#1 {
'k1' => { 'x1' => '123', 'x2' => '321' },
'k2' => 'v2',
'k3' => 'v3',
'k4' => 'v4'
},
#2 {
'k1' => { 'x1' => '123', 'x2' => '321' },
'k2' => 'v2',
'k3' => 'v3',
'k4' => 'v4'
},
],
}
这是我的密码。我想在访问键和值的同时迭代哈希“%myHash”。然后,对于“items”数组中的每个散列,我想执行一些操作
在本例中,我的键是“1234”,其值是包含键“items”的散列。这是我的代码(散列的一个引用正在传递给我的sub):
以及它的名称:
my $results = iterateHash(\%myHash);
稍后我会用到键,这就是为什么我希望在外部while循环中访问成对的键和值,但现在我想让这部分正常工作
这是我得到的错误:
Global symbol "%item" requires explicit package name
您传递了一个引用,但没有将其视为
iterateHash
中的引用。此外,一旦进入嵌套结构,所有内容都是引用,因此$item
是散列引用而不是普通散列
sub iterateHash {
my ($myHash) = @_;
while (my ($key, $value) = each %$myHash) {
my %newHash;
foreach my $item (@{ $value->{'items'} }) {
if( !(defined $newHash{'nk1'}) ) {
$newHash{'nk1'} = $item->{'k1'}->{'x2'};
}
}
}
}
请说明如何调用它,包括如何定义
iterateHash
的参数。您传递的是实际哈希还是哈希引用?一旦进入嵌套结构,所有内容都是引用。@JimGarrison我在上面提到过,我正在将引用传递给这个子对象。在上面添加了调用。啊,好的。所以我没有取消引用我传入的哈希来访问值或嵌套项?谢谢你说的对。我个人发现在任何地方使用引用都要容易得多,因为在嵌套数据结构中使用的就是引用。我从未(几乎从未)使用过普通散列。如果我使用“%$myHash”,则会出现以下错误:“不能使用字符串(“1”)作为散列引用,而使用“严格引用”“.哎呀。。。我的代码中有个小错误,我会改正的。忘记了第一条语句中$myHash
周围的括号。请提供列表上下文,以便将@
的第一个元素分配给$myHash
sub iterateHash {
my ($myHash) = @_;
while (my ($key, $value) = each %$myHash) {
my %newHash;
foreach my $item (@{ $value->{'items'} }) {
if( !(defined $newHash{'nk1'}) ) {
$newHash{'nk1'} = $item->{'k1'}->{'x2'};
}
}
}
}