функция сортировки в Perl - PullRequest
4 голосов
/ 23 июня 2011
use warnings;

my @a = (1, 11, 3, 5, 21, 9, 10);

my @b = sort @a;

print "@b";

Вывод: 1 10 11 21 3 5 9

Ссылка на кодовую панель: http://codepad.org/Fvhcf3eP

Я думаю, функция sort не принимает элементы массива как целое число.Вот почему вывод не:

1 3 5 9 10 11 21

Это так?

Как я могу получить приведенный выше результат в качестве вывода?

Ответы [ 7 ]

12 голосов
/ 23 июня 2011

Реализация по умолчанию функции Perl sort заключается в сортировке значений в виде строк. Чтобы выполнить числовую сортировку:

my @a = sort {$a <=> $b} @b;

На связанной странице показаны другие примеры сортировки без учета регистра, в обратном порядке (по убыванию) и т. Д.

Вы можете создать явные подпрограммы для предотвращения дублирования:

sub byord { $a <=> $b };
...
@a = sort byord @b;

Это функционально эквивалентно первому примеру, использующему анонимную подпрограмму.

7 голосов
/ 23 июня 2011

Вы правы. Так что просто скажите Perl, чтобы он воспринимался как целое число, как показано ниже.

cat foop.pl

use warnings;

my @a = (1, 11, 3, 5, 21, 9, 10);

my @b = sort {$a <=> $b} @a;

print "@b";


perl foop.pl 
1 3 5 9 10 11 21
6 голосов
/ 23 июня 2011

Предоставление пользовательской функции сравнения (сравнение численно):

sort {$a <=> $b} @array;
4 голосов
/ 23 июня 2011
@b = sort { $a <=> $b } @a;

Числовой

4 голосов
/ 23 июня 2011

используйте «оператор космического корабля»: sort { $a <=> $b } @a

4 голосов
/ 23 июня 2011

Вот числовая сортировка:

@sorted = sort { $a <=> $b } @not_sorted   
3 голосов
/ 23 июня 2011

Гадание - неправильный подход. Если вы не понимаете сортировку, посмотрите: http://perldoc.perl.org/functions/sort.html

my @b = sort{$a <=> $b} @a;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...