Как отсортировать числа в Perl?

print "@_\n";
4109 4121 6823 12967 12971 14003 20186

Как мне отсортировать его в Perl?

Используя @sorted = sort (@_); дает мне алфавитный порядок

13041 13045 14003 20186 4109 4121 6823

Как получить числовой порядок? Есть ли в Perl встроенные функции для сортировки слиянием, вставки и т. Д .?

24
задан codaddict 28 August 2010 в 12:42
поделиться

4 ответа

Укажите функцию сравнения для 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) . <=> , используемый выше, является числовым оператором сравнения.

9
ответ дан 28 November 2019 в 22:21
поделиться

Perl сортировка по умолчанию сортирует в алфавитном порядке в ASCII-порядок. Для числовой сортировки вы можете использовать:

@sorted = sort { $a <=> $b } @_;
8
ответ дан 28 November 2019 в 22:21
поделиться

Это FAQ по Perl. Из командной строки:

perldoc -q sort

perlfaq4: Как отсортировать массив по (чему угодно)?

6
ответ дан 28 November 2019 в 22:21
поделиться

Вы можете заранее определить функцию, которая должна использоваться для сравнения значений в вашем множество. 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;
3
ответ дан 28 November 2019 в 22:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: