开发者

Why doesn't Perl's "sort" put these hash keys in numeric order?

Consider:

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

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

When I execute the above code, the result is as below:

1:  1
10:  10
2:  2
3:  3
4:  4
5:  5
6:  6
7开发者_运维技巧:  7
8:  8
9:  9

I expect "10: 10" to be the last one that is printed. Why does Perl give me a surprise in this case?


sort always defaults to string comparison.

If you want a numeric sort, you have to be explicit.

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


Don't forget that the keys in a Perl hash are always stored as strings so the output does make sense.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜