首页 文章

迭代哈希中的哈希数组

提问于
浏览
1

我是Perl的新手,我很难在哈希中迭代哈希数组 . 我试过this solution这是Dumper的数据结构:

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):

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'};
            }
        }
    }
}

以及如何调用它:

my $results = iterateHash(\%myHash);

我后来使用了密钥,这就是为什么我想在外部while循环中访问一对中的键和值,但是现在我想让这部分工作 .

这是我得到的错误:

Global symbol "%item" requires explicit package name

1 回答

  • 2

    您传递了一个引用,但没有将其视为 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'};
                }
            }
        }
    }
    

相关问题