Perl 相同的散列键,不同的值:如何比较它们?
我想比较hashmap中相同键的值。我想比较并获得同一密钥的最新日期。它返回hashmap中显示的最后一个日期。我想比较并获取最近的日期,即使它出现在hashmap的第一位。 当同一个键在hashmap中第二次出现时,我很难将第二个日期与键出现时的第一个日期进行比较 这是我的密码: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',
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我知道。这样问,你不会得到你需要的答案。这是为了在从文件中读取值时比较这些值。