Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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



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

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

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, 01:46   #2
Naive
Раздолбайских Дел
Профессионал
 
Аватар для Naive
 
Регистрация: 22.05.2009
Адрес: Екатеринбург
Сообщений: 3,418
Репутация: 1747
По умолчанию

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

Уже давно вместе не работаем, а хак юзаю до сих пор)
п.с. приблизил, конечно, под задачу)
__________________
ridero.ru — издай свою книгу по-человечески
Жду ваши искренние спасибы на яндекс-кошелек: 410011068154587
Naive вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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




03:32.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Покупайте на сайте www.skinon.ru уникальные чехлы и наклейки для телефонов.
таргетированный трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru