Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Perl
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.08.2016, 16:05   #1
DJ_SAN
 
Регистрация: 15.03.2009
Сообщений: 3
По умолчанию Сортировка данных в списке

Всем доброго времени суток. Встретился с задачей сортировки данных:
Имеется файл входных данных:

1000001 77.847
1000004 79.914
1234568 89.656
1000001 212.843
1234568 225.265
1000004 234.535

на выходе хотелось бы увидеть:
1. 1000001 134.996
2. 1234568 135.609
3. 1000004 155.621

значения в списке сортируются по меньшему времени и по наименьшему количеству кругов. Сортировка никак не хочет запускаться.

Код:
open(my $out, ">", "OUTPUT1.TXT") || die("Error open OUTPUT1.TXT\n");
foreach my $nomer_fio (sort(keys(%sportsmans))){
     
    showResult(\%sportsmans, \%rezults, $nomer_fio); #забираем из циклов последние значения и записываем их в файл
    $currTime{$ring} = $currTime #записываю данные в хеш массив
    }
    winSort (\%currTime) #сортируем значения
close($out);
close($in);
 
# Функция вывода 
sub showResult {
    my ($names, $rez, $name) = @_;
    my $previousTime = 0; # время предыдущего круга
    my $ring = 1; # номер круга
    print $out "Результаты спортсмена $names->{$name}\n\n";
    print $out "Круг\tОбщее время\tВремя круга\n";
    
     foreach my $currTime (@{$rez->{$name}}) {
        my @list = @{$rez->{$name}};
    my $delta = sprintf "%.3f", $currTime - $previousTime;
        if (@list = $list[-1]) {; print $out "$ring\t$currTime\t$delta\n" ;; }
    $ring++;
        $previousTime = $currTime;
    }
    print $out "\n\n\n";
    }
sub winSort { 
       ~~@{$b->[1]} <=> ~~@{$a->[1]}
                    ||
    sum(@{$a->[1]}) <=> sum(@{$b->[1]})
}
Саму сортировку я подсмотрел из другой программы, но приспособить ее к своей никак не получается.
Помогите довести код до ума
DJ_SAN вне форума Ответить с цитированием
Старый 22.09.2016, 00:46   #2
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

В перле я ноль и по твоему коду конкретно ничего не подскажу, но...
Когда только начинал работать и у меня была подобная задача, один профи по перлу подсказал алгоритм как бы он решал это на перле =)
0. построчно разбиваем список на массив
1. перегоняем массив в хэш, где ключами будет тарджет склейки (в данном случае, видимо, артикул)
2. суммируем то, что нам надо (в данном случае, видимо стоимость и количество строк)
3. перегоняем обратно в массив и там уже сортируем.

Уже давно вместе не работаем, а хак юзаю до сих пор)
п.с. приблизил, конечно, под задачу)
Alar, верни репу!
Naive вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка в однонаправленном списке.С++ Арий Помощь студентам 0 02.06.2015 18:16
Проверка данных с списке по правилам FoxRiver Microsoft Office Excel 8 28.06.2013 14:54
Сортировка char в двусвязном списке preanik Помощь студентам 0 12.05.2013 02:18
Сортировка в списке Uroboros Помощь студентам 17 18.01.2011 22:04