www.Litecode.ru – Сборник рецептов для создания сайтов

Сортировка Шварца

ГлавнаяPerl → Сортировка Шварца

Для сортировки массивов данных, одновременно по нескольким значениям хорошо подходит сортировка Шварца. Допустим, Вам необходимо отсортировать прайс с товарами в следующем порядке: название, цвет, цена. Можно конечно сортировать в базе:

SELECT label,color,price
    FROM goods
    WHERE section = 1
    ORDER BY label,color,price

Но практически, так не рекомендуется делать чтобы не положить сервер. На высоко нагруженных проектах следует применять сортировку Шварца. Например дан массив массивов:

    my @data = (
        ['Амиак','Непонятный цвет',130],
        ['Амиак','Белый',30],
        ['Амиак','Беленький',130],
        ['Амиак','Белый',10],
        ['Амиак','Без цвета',300]
    );

Делаем тройную сортировку Шварца. Нулевые члены массивов сортируем по возрастанию, по алфавиту. Первые по возрастанию, по алфавиту. Вторые по возрастанию, по числовому признаку.

    @data = sort {
    
    ( $a->[0] cmp $b->[0] )
    or ( $a->[1] cmp $b->[1] )
    or (  $a->[2] <=> $b->[2] )
    
    } @data;

Печатаем результат:

    foreach (@data){
        foreach my $a(@$_){
            print "$a
" } print "
"; }

В итоге получаем то что нужно:

Амиак
Без цвета
300

Амиак
Беленький
130

Амиак
Белый
10

Амиак
Белый
30

Амиак
Непонятный цвет
130