簡體   English   中英

在perl中過濾哈希引用數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM