Forum Webscript.Ru
Программирование => Perl => Тема начата: Billi от 02 Декабря 2003, 14:35:21
-
Соритрую 2-х мерный массив по 2м ключам, соритровка выполняется давольно длительное время (4000 значений сортируюся приблезительно 4 секунды)
Исходник ......
................
@finally = map {$_->
sort{$a_->[1] cmp $b_->[1] || $a_->[2] <=> $b_->[2]}
map{[$_,$_->
.................
Можноли как то ускорить данный процесс?
-
А что если попробовать СУБД?
ps: Может и без того способ есть, правда, понять это видя 3 строчки кода и не видя задачи довольно "сложно".
-
На MySQL пробовал, бытрее но в том вся и тема что надо на перл реализовать.
Суть задачи проста - есть таблица
Название товара и Цена
Надо отсортировать товар сначала по типу а внутри типа по цене.
-
Вот выбрал время и подумал над твоей задачей:
-------
# Наберем массив:
my @mass = ();
for (1..4000) {
my $tmp = [];
for my $n (1..10) {
push @$tmp, int(rand(20000));
}
push @mass, [ genrstr(int rand(64)), $tmp ]; # genrstr - возвращает абракадабру заданой длины
}
# и отсортируем
my $time = gettimeofday; # засекаем время
$_->[1] = [ sort {$a <=> $b} @{$_->[1]} ] for @mass;
@mass = sort {$a->
print gettimeofday - $time; # 0,35 сек (с map\'ами выходило больше)
-----
Зы: Если мимо, то уж в следующий раз поточнее опиши условия. И ненадо так утрамбовывать код - его потом прочитать нельзя.
-
Billi
Ну а алгоритмы сортировки посмотреть? Того же Кнута почитать? :)