我有一个Perl哈希,其键以数字开头,或者是数字.
如果我用,
foreach my $key (sort keys %hash) { print $hash{$key} . "\n"; }
列表可能会出现,
0 0001 1000 203 23
代替
0 0001 23 203 1000
Paul Tomblin.. 39
foreach my $key (sort { $a <=> $b} keys %hash) { print $hash{$key} . "\n"; }
排序操作采用可选的比较"子程序"(作为代码块,如我在此处所做的,或子程序的名称).我提供了一个在线比较,使用内置的数字比较运算符'<=>'将键视为数字.
foreach my $key (sort { $a <=> $b} keys %hash) { print $hash{$key} . "\n"; }
排序操作采用可选的比较"子程序"(作为代码块,如我在此处所做的,或子程序的名称).我提供了一个在线比较,使用内置的数字比较运算符'<=>'将键视为数字.
保罗的答案对于数字来说是正确的,但是如果你想更进一步,将混合的单词和数字分类为人类的意愿,既cmp
不会<=>
也不会.例如...
9x 14 foo fooa foolio Foolio foo12 foo12a Foo12a foo12z foo13a
排序::自然地处理提供nsort
和ncmp
例程的这个问题.