gpt4 book ai didi

perl - 查找与特定键匹配的嵌套哈希值

转载 作者:行者123 更新时间:2023-12-01 06:41:21 24 4
gpt4 key购买 nike

我在 perl 中创建了一个散列的散列,这是一个散列最终看起来像的例子:

my %grades;
$grades{"Foo Bar"}{Mathematics} = 97;
$grades{"Foo Bar"}{Literature} = 67;
$grades{"Peti Bar"}{Literature} = 88;
$grades{"Peti Bar"}{Mathematics} = 82;
$grades{"Peti Bar"}{Art} = 99;

为了打印整个散列,我正在使用:

foreach my $name (sort keys %grades) {
foreach my $subject (keys %{ $grades{$name} }) {
print "$name, $subject: $grades{$name}{$subject}\n";
}
}

我只需要打印引用“Peti Bar”的内部散列并找到最高值,所以理论上,我应该只解析 Peti Bar,Literature; Peti Bar,数学;和 Peti Bar,Art 并最终返回 Art,因为它具有最高的值(value)。有没有办法做到这一点,或者我是否需要解析整个 2d 哈希?

最佳答案

如果您知道您感兴趣的 key ,则无需解析第一级。只需省略第一个循环并直接访问它。要获得最高值(value),您必须对每个主题都看一遍。

跟踪最高值和与之对应的键,然后打印。

my $max_value = 0;
my $max_key;
foreach my $subject (keys %{ $grades{'Peti Bar'} }) {
if ($grades{'Peti Bar'}{$subject} > $max_value){
$max_value = $grades{'Peti Bar'}{$subject};
$max_key = $subject;
}
}
print $max_key;

这将输出

Art

使用 sort 的替代实现如下所示:

print +(
sort { $grades{'Peti Bar'}{$b} <=> $grades{'Peti Bar'}{$a} }
keys %{ $grades{'Peti Bar'} }
)[0];

+( ... ) 中的 + 告诉 Perl 括号 () 不是用于函数调用 print,而是构造一个列表。 sort 对键进行降序排序,因为它首先是 $b。它返回一个列表,我们取第一个值(索引 0)。

请注意,这比第一个实现更昂贵,而且不一定更简洁。除非你正在构建一个单行或你的 ; 坏了我不会推荐第二种解决方案。

关于perl - 查找与特定键匹配的嵌套哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42739255/

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