我如何排序一个Perl哈希键数字?



我的第一个问题…我通过搜索找到了许多其他问题的答案,但我这次失败了:-)

我想生成一个报告,该报告按嵌入在输入数据字符串中的数字排序。报告是由perl散列的元素生成的,其中使用相同的数字作为散列键。

我当前得到的输出像字符串一样排序。

foreach my $num (sort keys %dir_map) {
$path = $paths{$num};
$name = $names{$num};
printf OUT ("%d %s %sn",$num,$path,$name);
}

我的输入数据看起来像:

dist_14 randomString nameStringIwant RandomInteger AnotherRandomString

我像这样处理

while(<IN>) {
chomp;
my @header = split /s+/;
my $header_length = $#header ;
if ( /dist_/ ) {
my $NumberStr = $header[0] ;
$justNumberStr =~ s/dist_//;
my $justNumber = sprintf("%d",$justNumberStr);
$names{$justNumber} = $header[2];
}
}

您已经发现,Perl的排序将在默认情况下使用字符串比较进行排序。要覆盖默认行为,您需要提供一个排序块。

foreach my $num (sort { $a <=> $b } keys %dir_map)

排序块在变量$a$b中给定列表中的两个元素。您的代码应该比较这两个值,如果$a$b之前,则返回一个负整数,如果$b$a之前,则返回一个正整数,如果它们在相同的位置排序,则返回零。"宇宙飞船操作员"(<=>)对两个数字做了同样的处理。

FAQ如何按(任何东西)排序数组?可能也有用。你没有一个数组,但是你的键列表可以用同样的方式处理。

最新更新