print "@_\n";
4109 4121 6823 12967 12971 14003 20186
Как мне отсортировать его в Perl?
Используя @sorted = sort (@_);
дает мне алфавитный порядок
13041 13045 14003 20186 4109 4121 6823
Как получить числовой порядок? Есть ли в Perl встроенные функции для сортировки слиянием, вставки и т. Д .?
Укажите функцию сравнения для sort()
:
# sort numerically ascending
my @articles = sort {$a <=> $b} @files;
# sort numerically descending
my @articles = sort {$b <=> $a} @files;
Функция сортировки по умолчанию cmp
, сравнение строк, которое сортирует (1, 2, 10)
в (1, 10, 2)
. <=>
, используемый выше, является числовым оператором сравнения.
Perl сортировка
по умолчанию сортирует в алфавитном порядке в ASCII-порядок. Для числовой сортировки вы можете использовать:
@sorted = sort { $a <=> $b } @_;
Это FAQ по Perl. Из командной строки:
perldoc -q sort
Вы можете заранее определить функцию, которая должна использоваться для сравнения значений в вашем множество.
perldoc -f sort
дает вам пример:
# sort using explicit subroutine name
sub byage {
$age{$a} <=> $age{$b}; # presuming numeric
}
@sortedclass = sort byage @class;
<=>
оператор используется для числовой сортировки.
@sorted = sort {$a <=> $b} @unsorted;