[英]Filter array of hash references in perl
是否可以过滤由哈希引用数组生成的输出,以仅在包含特定键或值的情况下仅打印该数组元素的哈希引用,我的意思是打印出该数组元素的整个哈希。 此示例代码将打印出每个元素中的每个哈希:
for $i ( 0 .. $#AoH ) {
print "$i is { ";
for $role ( keys %{ $AoH[$i] } ) {
print "$role=$AoH[$i]{$role} ";
}
print "}\n";
}
我将如何过滤输出以仅打印具有包含特定键或值的hashref的元素?
中的hashref示例:
push @AoH, { husband => "fred", wife => "wilma", daughter => "pebbles" };
output:
husband=fred wife=wilma daughter=pebbles
只有在某种if语句(?)中指定了键之一(丈夫/妻子/女儿)或值之一(fred / wilma / pebbles)时,示例数据才被打印出来。
只需添加
next unless exists $AoH[$i]{husband};
后的第一for
。 如果husband
键不存在,它将跳过哈希。
要过滤值,请使用
next unless grep 'john' eq $_, values %{ $AoH[$i] };
要么
next unless { reverse %{ $AoH[$i] } }->{homer};
my %keys_to_find = map { $_ => 1 } qw( husband wife daughter );
my %vals_to_find = map { $_ => 1 } qw( fred wilma pebbles );
for my $person (@persons) {
my $match =
grep { $keys_to_find{$_} || $vals_to_find{$person->{$_}} }
keys(%$person);
next if !$match;
say
join ' ',
map { "$_=$person->{$_}" }
sort keys(%$person);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.