首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >grep散列,其中的值是数组的数组

grep散列,其中的值是数组的数组
EN

Stack Overflow用户
提问于 2021-04-30 21:00:08
回答 1查看 61关注 0票数 1

我有以下散列(print Dumper(\%hash)的结果)

代码语言:javascript
复制
$VAR1 = {
      'A' => [
                   [
                     '1',
                     'PRESENT_1',
                     'ABSENT_2',
                   ],
                   [
                     '2',
                     'PRESENT_1',
                     'ABSENT_2',
                   ]
                 ],
      'B' => [
                  [
                    '5',
                    'PRESENT_1',
                    'ABSENT_2',
                  ],
                  [
                    '6',
                    'PRESENT_1',
                    'ABSENT_2',
                  ],
                  [
                    '7',
                    'ABSENT_1',
                    'PRESENT_2',
                  ]
                ]
    };

我正在循环哈希&我想检查我是否可以在每个‘grep’数组中找到一个特定值。但是,我在这里肯定做错了什么。数组'B‘的IF条件应为TRUE,但对于'A’则不应为TRUE。在'A‘中你只有'PRESENT_1’和‘PRESENT_1_2’,所以这应该会导致FALSE。在数组'B‘中,你同时有'PRESENT_1’和'PRESENT_2',所以结果应该是真的。

代码语言:javascript
复制
for my $key (keys %hash) {
    if (( grep /"PRESENT_1"/, @{$hash{$key}} ) & ( grep /"PRESENT_2"/, @{$hash{$key}} )) {
        print "# OK: " , $key, " ", @{$hash{$key}}, "\n";
    } else {
        print "# DISCARD: " , $key, " ", @{$hash{$key}}, "\n";
    }
}

我想我的问题和这个类似:Perl Grep issue in nested hash/array,但是我不能让它工作。

有人能看到哪里出了问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-30 21:35:21

您需要再取消一个级别的引用。链接的问题是一个HoA结构,但您有一个HoAoA。

代码语言:javascript
复制
use warnings;
use strict;

my $VAR1 = {
      'A' => [
                   [
                     '1',
                     'PRESENT_1',
                     'ABSENT_2',
                   ],
                   [
                     '2',
                     'PRESENT_1',
                     'ABSENT_2',
                   ]
                 ],
      'B' => [
                  [
                    '5',
                    'PRESENT_1',
                    'ABSENT_2',
                  ],
                  [
                    '6',
                    'PRESENT_1',
                    'ABSENT_2',
                  ],
                  [
                    '7',
                    'ABSENT_1',
                    'PRESENT_2',
                  ]
             ]
    };

my %hash = %{ $VAR1 };
for my $key (keys %hash) {
    my $p1 = 0;
    my $p2 = 0;
    for my $aref (@{ $hash{$key} }) {
        $p1 = 1 if grep /PRESENT_1/, @{ $aref };
        $p2 = 1 if grep /PRESENT_2/, @{ $aref };
    }
    if ($p1 and $p2) {
        print "# OK: $key\n";
    }
    else {
        print "# DISCARD: $key\n";
    }
}

输出:

代码语言:javascript
复制
# DISCARD: A
# OK: B
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67334383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档