为什么Perl的“排序”不按数字顺序放置这些哈希键?

时间:2010-03-09 09:59:02

标签: perl sorting

#!/usr/bin/perl
use strict;
use warnings;

my %hash;
foreach ( 1 .. 10 ) {
    $hash{$_} = $_;
}
foreach ( sort(keys %hash) ) {
    print $_ . ":  " . "$hash{$_}" . "\n" ;
}

当我执行上面的代码时,结果如下:

1:  1
10:  10
2:  2
3:  3
4:  4
5:  5
6:  6
7:  7
8:  8
9:  9

我希望“10:10”成为最后一个印刷品。我只需要有人解释为什么Perl会在这种情况下给我一个惊喜。

2 个答案:

答案 0 :(得分:37)

sort始终defaults to string comparison

如果您想要数字排序,则必须明确。

sort {$a <=> $b} (keys %hash)

答案 1 :(得分:-3)

不要忘记Perl哈希中的键总是存储为字符串,因此输出有意义