arrays - grep 哈希值是数组的数组
问题描述
我有以下哈希(结果print Dumper(\%hash)
)
$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”则不是。在“A”中,您只有“PRESENT_1”和“ABSENT_2”,所以这应该导致 FALSE。在数组“B”中,您同时拥有“PRESENT_1”和“PRESENT_2”,因此结果应为 TRUE。
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,但我无法让它工作。
有人可以看看有什么问题吗?
解决方案
您需要再取消引用一个级别。链接的问题是一个 HoA 结构,但你有一个 HoAoA。
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";
}
}
输出:
# DISCARD: A
# OK: B
推荐阅读
- javascript - 打字稿展平地图数组
- jmeter - Jmeter中的文件上传问题
- python - Django 模型/SQL 如何确定查询中想要的“GROUP BY”部分?
- uwp - 如何在 UWP 中打开用户控件
- modelica - 动态管道系统
- html - 模糊背后有内容的 HTML 元素的背景
- gem5 - 为什么首先从检查点恢复操作?
- firebase - 有没有办法使用flutter web将数据从Firebase下载到csv/excel文件中?
- python - 如何使用openpyxl枚举具有(非空)值的Excel工作表中的所有单元格?
- html - 放入“行”类时,锚“按钮”不起作用