grep hash 其中值是数组的数组
grep hash where values are array of arrays
我有以下哈希(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
每个 'big' 数组中的特定值。
但是,我肯定在这里做错了什么。 IF 条件对于数组 'B' 应该为 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
我有以下哈希(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
每个 'big' 数组中的特定值。
但是,我肯定在这里做错了什么。 IF 条件对于数组 'B' 应该为 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