Perl 相同的散列键,不同的值:如何比较它们?

Perl 相同的散列键,不同的值:如何比较它们?,perl,debugging,hashmap,Perl,Debugging,Hashmap,我想比较hashmap中相同键的值。我想比较并获得同一密钥的最新日期。它返回hashmap中显示的最后一个日期。我想比较并获取最近的日期,即使它出现在hashmap的第一位。 当同一个键在hashmap中第二次出现时,我很难将第二个日期与键出现时的第一个日期进行比较 这是我的密码: use strict; use warnings; my %hash = ( 48487 => '05/05/19', 52327 => '05/05/23',

我想比较hashmap中相同键的值。我想比较并获得同一密钥的最新日期。它返回hashmap中显示的最后一个日期。我想比较并获取最近的日期,即使它出现在hashmap的第一位。 当同一个键在hashmap中第二次出现时,我很难将第二个日期与键出现时的第一个日期进行比较

这是我的密码:

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个键/值对,但它只有5个键/值对。您可以通过以下方式向自己证明这一点:
use Data::Dumper;打印转储程序(\%hash)

您可以使用数据结构,然后使用来比较两个日期
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个。

发布时出现的问题不是问题。将值分配给散列时,不要添加不需要的键。那么你就不需要比较它们了。当然,我假设这不是你的实际代码,你只是编造了一些东西来问一个关于你认为你想知道什么的问题。这就是所谓的也许你应该回到你真正想问的问题。我假设是从某种数据源读取键/值对。@TLP实际上hashmap中的数据来自外部文件。我把它们放在hashmap中进行比较,得到最新日期的数据。@noak_2492我知道。这样问,你不会得到你需要的答案。这是为了在从文件中读取值时比较这些值。