繁体   English   中英

遍历哈希内部的哈希数组

[英]Iterating over an array of hashes inside of a hash

我是Perl的新手,我很难遍历哈希内部的一系列哈希。 我尝试过此解决方案这是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',同时可以访问键和值。 然后,对于“项目”数组中的每个哈希,我想执行一些操作。

在这种情况下,我的键是“ 1234”,其值是包含键“ items”的哈希。 这是我的代码(将对哈希的引用传递给我的子对象):

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

您传递了一个引用,但未将其像iterateHash的引用一样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'};
            }
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM