arrays - Perl:强制按数字顺序散列

标签 arrays perl sorting hash numeric

我正在尝试按记录编号顺序显示哈希数据(即按哈希键排序)。我已将记录存储在具有关联记录号的哈希中。

我在这里做错了什么?

这是一些显示问题的类似代码

#!/usr/bin/env perl
use strict;
use Time::HiRes;

my $rec = {};
my %Data;
my $recno = 1;

while ($recno <= 100) {
   $rec->{recno} = $recno;
   $rec->{dt} = qx/date/;

   $Data{ $rec->{recno} } = $rec;

   # Initialize
   Time::HiRes::sleep(0.2);
   $recno++;
   $rec = {};
}

my $count = keys %Data;
print "Found $count records\n";

foreach my $rec (sort { $Data{$a} <=> $Data{$b} } keys %Data) {
#foreach my $rec (sort { $Data{$a} cmp $Data{$b} } keys %Data) {
  print "   Rec No: --".$rec."--\n";
  print "     Date: ". $Data{$rec}{dt}."\n";
}

有时它确实按顺序显示哈希值,有时则不然。与它看起来的记录数量有些关系。

Found 100 records
   Rec No: --1--
     Date: Thu Feb 13 15:19:46 UTC 2020

   Rec No: --31--
     Date: Thu Feb 13 15:19:52 UTC 2020

   Rec No: --32--
     Date: Thu Feb 13 15:19:52 UTC 2020

   Rec No: --33--
     Date: Thu Feb 13 15:19:52 UTC 2020

   Rec No: --34--
     Date: Thu Feb 13 15:19:52 UTC 2020

   Rec No: --35--
     Date: Thu Feb 13 15:19:52 UTC 2020

   Rec No: --36--
     Date: Thu Feb 13 15:19:53 UTC 2020

最佳答案

您正在比较值,但您需要比较键:

for my $rec (sort { $a <=> $b } keys %Data) {

关于arrays - Perl:强制按数字顺序散列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60211183/

相关文章:

javascript - Angular JS 图像数组编码麻烦

arrays - 如何复制或引用一片字节?

php - Laravel - 如何按 ID 升序对对象数组进行排序

arrays - CUDA中的一维最小卷积

perl - 是否有任何解决方法可以让 perl 调试器在尚未加载的模块上设置断点?

perl - 如何使用命令行获取whois信息?

java - 从源代码检测对 Java API 方法的调用

php - 合并来自 PHP 的多个 MySQL 结果,使用相同的排序规则/排序

perl - 如何在其他列之间插入列 (Perl Spreadsheet::WriteExcel)

java - 带有用于保持计数排序的索引的 PriorityQueue