以哈希的哈希形式打印最低值



我在完成简单任务时遇到问题。我有以下哈希哈希:

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

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

人物A 2017

人物B 2013

人物C 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 $minn";
}

输出:

personA 2017
personB 2013
personC 2011

您可以避免使用任何模块,同时保持简单性。

use warnings;
use strict;
my %hash = (
personA => {
2017 => 1,
2018 => 2,
},
personB => {
2015 => 4,
2013 => 28,
2014 => 1,
},
personC => {
2013 => 3,
2011 => 2,
2012 => 45,
},
);
foreach my $person ( sort keys %hash ) {
printf( "%s %dn", $person, ( sort keys %{ $hash{$person} } )[0] );
}

( 排序键 %{ $hash{$person} } ([0]- 按升序(默认情况下(对键进行排序,然后获取第一个键。

最新更新