arrays - Perl:强制按数字顺序散列
问题描述
我正在尝试按记录号顺序显示哈希数据(即按哈希键排序)。我已将记录存储在带有关联记录号的哈希中。
我在这里做错了什么?
这是一些显示问题的类似代码
#!/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) {
推荐阅读
- sql - 非单组函数查询错误
- java - 如何在运行时实例化接口?
- r - 删除数据框中的重复行
- google-bigquery - Google Cloud Big Query Scheduled Queries 与 JURISDICTION 相关的奇怪错误
- msbuild - DBContext在不同程序集中时如何创建迁移
- angular - 如何将 Excel 文件 (.xlxs) 从 Angular 前端上传到 Laravel API?
- unit-testing - 如何让点击或类在 Jest 单元测试中工作
- javascript - 如何将变量从 python 文件发送到 javascript 文件?
- spring - 从 @value 访问从后端 java 对象加载的属性
- visual-studio-code - VSCode ANTLR4 插件:将调用图导出为 JSON?