相同的哈希键,不同的值:我如何比较它们?
Same hash keys, different value: how can I compare them?
我想比较哈希图中相同键的值。我想比较并获取同一密钥的最新日期。它 returns 出现在哈希图中的最后一个日期。我想比较并获取最新日期,即使它出现在哈希图中的第一个。
当同一个键在哈希图中第二次出现时,我很难将键出现时的第二个日期与第一个日期进行比较。
这是我的代码:
use strict;
use warnings;
my %hash = ( 48487 => '05/05/19',
52327 => '05/05/23',
123 => '06/01/01',
52327 => '07/08/24',
123 => '07/08/02',
44147 => '24/12/18',
48487 => '05/05/18',
44147 => '24/12/19',
64998 => '05/11/25',
52327 => '05/06/24',
64998 => '05/05/24' );
foreach ( sort { $hash{$a} cmp $hash{$b} } keys %hash) {
print "Date:$hash{$_}\tKey:$_\n";
}
您认为您的哈希有 11 key/value 对,但它只有 5 对。您可以通过以下方式向自己证明这一点:use Data::Dumper; print Dumper(\%hash);
您可以使用 Hash-of-Arrays data structure instead, then use Time::Piece 来比较您的 2 个日期。 Time::Piece
是一个核心模块,这意味着您不必安装它。
use warnings;
use strict;
use Time::Piece;
my %hash = (
48487 => [qw(05/05/19 05/05/18)],
52327 => [qw(05/05/23 07/08/24)],
123 => [qw(06/01/01 07/08/02)],
);
for my $k (keys %hash) {
my $d1 = Time::Piece->strptime($hash{$k}[0], '%d/%m/%y');
my $d2 = Time::Piece->strptime($hash{$k}[1], '%d/%m/%y');
if ($d1 > $d2) {
print "$k $hash{$k}[0]\n";
}
else {
print "$k $hash{$k}[1]\n";
}
}
这会打印:
48487 05/05/19
52327 07/08/24
123 07/08/02
注意:为了简单起见,我只发布了您的 5 个唯一密钥中的 3 个。
我想比较哈希图中相同键的值。我想比较并获取同一密钥的最新日期。它 returns 出现在哈希图中的最后一个日期。我想比较并获取最新日期,即使它出现在哈希图中的第一个。 当同一个键在哈希图中第二次出现时,我很难将键出现时的第二个日期与第一个日期进行比较。
这是我的代码:
use strict;
use warnings;
my %hash = ( 48487 => '05/05/19',
52327 => '05/05/23',
123 => '06/01/01',
52327 => '07/08/24',
123 => '07/08/02',
44147 => '24/12/18',
48487 => '05/05/18',
44147 => '24/12/19',
64998 => '05/11/25',
52327 => '05/06/24',
64998 => '05/05/24' );
foreach ( sort { $hash{$a} cmp $hash{$b} } keys %hash) {
print "Date:$hash{$_}\tKey:$_\n";
}
您认为您的哈希有 11 key/value 对,但它只有 5 对。您可以通过以下方式向自己证明这一点:use Data::Dumper; print Dumper(\%hash);
您可以使用 Hash-of-Arrays data structure instead, then use Time::Piece 来比较您的 2 个日期。 Time::Piece
是一个核心模块,这意味着您不必安装它。
use warnings;
use strict;
use Time::Piece;
my %hash = (
48487 => [qw(05/05/19 05/05/18)],
52327 => [qw(05/05/23 07/08/24)],
123 => [qw(06/01/01 07/08/02)],
);
for my $k (keys %hash) {
my $d1 = Time::Piece->strptime($hash{$k}[0], '%d/%m/%y');
my $d2 = Time::Piece->strptime($hash{$k}[1], '%d/%m/%y');
if ($d1 > $d2) {
print "$k $hash{$k}[0]\n";
}
else {
print "$k $hash{$k}[1]\n";
}
}
这会打印:
48487 05/05/19
52327 07/08/24
123 07/08/02
注意:为了简单起见,我只发布了您的 5 个唯一密钥中的 3 个。