7

フィルタリングする必要があるハッシュのハッシュがあります。ルックアップの方法を見つけましたが、私の質問には答えませんでした。

そのようなハッシュのハッシュがあるとします:

my %HoH = (
    flintstones => {
        husband   => "fred",
        pal       => "barney",
        town      => "springfield"
    },
    jetsons => {
        husband   => "george",
        wife      => "jane",
        "his boy" => "elroy",
    },
    simpsons => {
        husband   => "homer",
        wife      => "marge",
        kid       => "bart",
        town      => "springfield",
    },
);

スプリングフィールドのすべての町民が欲しいとしましょう。部外者なしで出力に同じハッシュのハッシュが必要です。

my %HoH = (
    flintstones => {
        husband   => "fred",
        pal       => "barney",
        town      => "springfield"
    },
    simpsons => {
        husband   => "homer",
        wife      => "marge",
        kid       => "bart",
        town      => "springfield",
    },
);

ばかげているようですが、構造をフィルタリングする方法がわかりません。目標は、フィルタリング後にスプリングフィールドのすべての人々を反復処理することです。

もちろん、私はいくつかの調査を行いましたが、最も近いものはハッシュスライスです。しかし、彼らは怖いようです。

4

3 に答える 3

4

ハッシュが必要な場合は、またはgrepList ::Pairwiseからのmap使用を検討できます。利点は、grep/map コード ブロックで元のハッシュ変数に言及する必要がなくなり、より「機能的」になることです。したがって、問題は次のように解決できます。greppmapp

use List::Pairwise qw(grepp);
%HoH = grepp { $b->{town} eq 'springfield' } %HoH; # $a is the current key, $b is the current value
于 2013-09-06T16:42:22.993 に答える
0
for my $key (keys %HoH) {
delete $HoH{$key} if(!$HoH{$key}{town});
                    (OR)
delete $HoH{$key} if($HoH{$key}{town} !~ m/springfield/);
}

答えが得られる削除オプションのいずれかを使用してください...

于 2014-10-01T13:37:05.370 に答える