gpt4 book ai didi

perl - 嵌套哈希 perl 中的 grep

转载 作者:行者123 更新时间:2023-12-01 05:46:16 28 4
gpt4 key购买 nike

我的哈希看起来像这样:

$VAR1 = {
'1238' => {
'OUT3FA_5' => 65,
'SEV' => '3_major',
'OUT3A_5' => 20,
'OUT3-Fix' => 45,
'IN1' => 85
},
'1226' => {
'OUT3FA_5' => 30,
'SEV' => '4_minor',
'OUT3A_5' => 5,
'OUT3-Fix' => 25,
'IN1' => 40
},
'1239' => {
'OUT3FA_5' => 56,
'SEV' => '4_minor',
'OUT3A_5' => 34,
'OUT3-Fix' => 22,
'IN1' => 94
}]

我希望我的 Perl 脚本只返回对应于 "SEV"= "4_minor"的值在这种情况下它会返回:

    '1226' => {
'OUT3FA_5' => 30,
'SEV' => '4_minor',
'OUT3A_5' => 5,
'OUT3-Fix' => 25,
'IN1' => 40
},
'1239' => {
'OUT3FA_5' => 56,
'SEV' => '4_minor',
'OUT3A_5' => 34,
'OUT3-Fix' => 22,
'IN1' => 94
}

但是当我像这样使用 grep 时:

my $Sev_Logged = "4_minor";
my $node_hash = {
Week => [
grep { $hash{$_}{'SEV'} eq $Sev_Logged } %hash,
]
};

# Print in json format
my $json = encode_json \%$node_hash;
print $json;

它只返回:

{"Week":["1226","1239"]}

并且我希望它返回与包含 SEV="4_minor"的每个星期相对应的所有其他数据。我怎样才能做到这一点?任何帮助将不胜感激。

最佳答案

当您通过这种方式将 %hash 交给 grep 时,Perl 会将散列解释为键和值的偶数列表——导致 grep {...} block 为每个键调用一次,为每个值调用一次(而不是为每对键和值调用)。

试试这样的:

{ map { ($_ => $hash{$_} } grep { $hash{$_}->{SEV} eq $Sev_Logged } keys %hash }

grep 保留那些 SEV 字段与您想要的匹配的哈希键。 map 之后会重建一个哈希(因为此时我们只有从 grep 返回的键),最后我们将其转换为哈希引用。

关于perl - 嵌套哈希 perl 中的 grep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13496788/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com