Почему «сортировка» Perl не помещает эти ключи хеша в числовом порядке? - PullRequest
8 голосов
/ 09 марта 2010
#!/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 ]

37 голосов
/ 09 марта 2010

sort всегда по умолчанию для сравнения строк .

Если вам нужна числовая сортировка, вы должны быть явными.

sort {$a <=> $b} (keys %hash)
0 голосов
/ 09 марта 2010

Не забывайте, что ключи в хэше Perl всегда хранятся в виде строк, поэтому вывод имеет смысл .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...