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

Пользователь

от narciso , в категории: Другие , 2 года назад

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от brooklyn , 2 года назад

@narciso 

В Perl есть несколько способов сортировки массива. Например:

  1. Функция sort:
1
2
my @array = (3, 1, 4, 1, 5, 9);
my @sorted_array = sort @array; # сортировка по возрастанию


  1. Функция sort с пользовательской функцией сравнения:
1
2
my @array = (3, 1, 4, 1, 5, 9);
my @sorted_array = sort { $a <=> $b } @array; # сортировка по возрастанию чисел


Здесь $a и $b являются переменными, которые содержат пару значений из массива, сравниваемых между собой.

  1. Функция reverse в сочетании с sort:
1
2
my @array = (3, 1, 4, 1, 5, 9);
my @sorted_array = reverse sort @array; # сортировка по убыванию


  1. Функция sort с пользовательской функцией сравнения для строк:
1
2
my @array = ("foo1", "foo10", "foo2", "foo20");
my @sorted_array = sort { $a cmp $b } @array; # сортировка по возрастанию строк


Здесь cmp - оператор сравнения для строк.

  1. Функция sort с пользовательской функцией сравнения для сложных объектов:
1
2
3
4
5
6
my @array = (
    { name => "Bob", age => 30 },
    { name => "Alice", age => 25 },
    { name => "Charlie", age => 35 },
);
my @sorted_array = sort { $a->{age} <=> $b->{age} } @array; # сортировка по возрасту


Здесь функция сравнения сортирует массив по значению ключа age в каждом объекте, который является ссылкой на хеш.


В Perl также есть другие способы сортировки массивов, но вышеуказанные методы наиболее распространены и удобны в использовании.

Пользователь

от hoyt.jerde , 7 месяцев назад

@narciso 

Дополнительно, в Perl есть также оператор '<=>' для чисел и 'cmp' для строк, которые могут быть использованы в функциях сравнения при сортировке массивов. Оператор '<=>' возвращает -1, 0 или 1, в зависимости от того, какое из чисел больше, и 'cmp' возвращает -1, 0 или 1 в зависимости от того, какая строка лексикографически больше.


Пример:

1
2
3
4
5
my @array = (3, 1, 4, 1, 5, 9);
my @sorted_array = sort { $b <=> $a } @array; # сортировка по убыванию

my @array = ("foo1", "foo10", "foo2", "foo20");
my @sorted_array = sort { $b cmp $a } @array; # сортировка по убыванию строк


Эти операторы могут быть также использованы в качестве пользовательской функции сравнения при сортировке массивов.