perl - 打印哈希散列中的最低值

标签 perl hash

我在完成一项简单任务时遇到问题。我有以下散列的散列:

%hash = (
personA => {
    2017   => 1,
    2018   => 2,
},
personB => {
    2015   => 4,
    2013   => 28,
    2014   => 1, .
},
personC => {
    2013   => 3,
    2011   => 2,
    2012   => 45,
},
);

我正在尝试打印出每个人的最早年份,例如类似于:

人A 2017

personB 2013

personC 2011

List::Util 似乎是最好的工具,但我找不到适合我的数据的示例。我遇到了麻烦,因为我找到的解决方案试图对哈希的第一级(即 personA 等)进行排序/打印,而不是年份。

use strict;
use warnings;

my %hash;
my $hash; 

%hash = (
personA => {
    2017   => 1,
    2018   => 2,
},
personB => {
    2015   => 4,
    2013   => 28,
    2014   => 1,
},
personC => {
    2013   => 3,
    2011   => 2,
    2012   => 45,
},
);

use List::Util qw(min);
my $min = min keys %hash;
$hash = {$min => $hash->{$min}};

最佳答案

遍历人。然后,取消引用每个人的散列以获取年份列表:

use warnings;
use strict;
use List::Util qw(min);

my %people = (
personA => {
    2017   => 1,
    2018   => 2,
},
personB => {
    2015   => 4,
    2013   => 28,
    2014   => 1,
},
personC => {
    2013   => 3,
    2011   => 2,
    2012   => 45,
},
);

for my $person (sort keys %people) {
    my $min = min(keys %{ $people{$person} });
    print "$person $min\n";
}

输出:

personA 2017
personB 2013
personC 2011

关于perl - 打印哈希散列中的最低值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52387910/

相关文章:

regex - 使用正则表达式查找匹配项 - perl

php - crypt($pass, '$2y$09$salt' ) === crypt($pass, crypt($pass, '$2y$09$salt' )) 在 PHP 中如何运行?

ruby-on-rails - 如何删除哈希值为空的哈希键?

C smdb 哈希值 % tableSize 重复评估为相同值? (使用不同的输入。)

regex - 如何在插入 Perl 正则表达式的字符串中转义特殊字符?

c# - 此代码片段的 C# 等效项是什么?

perl - 如何将找不到的 Mojolicious Lite 默认错误更改为自定义 json 响应

用于 ssh 和重命名文件的 Perl 脚本

Python:具有内置库的更快的通用哈希函数

algorithm - 作业 : Implementing Karp-Rabin; For the hash values modulo q, 解释为什么用 q 作为 2 的幂是个坏主意?