Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Perl: Общие вопросы > Сортировка двумерного массива |
Автор: loginn 22.12.2010, 10:37 |
Значит, вот пример. Запустите, посмотрите вывод. Проблема в том, что когда сортирую по возрастанию по второму столбцу, часть значений первого снова перемешивается. #!/usr/bin/perl -w @ip=(["1.1.1.1",363],["4.4.4.4",53],["7.7.7.7",1234],["2.2.2.2",892],["3.3.3.3",743],["1.1.3.1",201],["2.2.2.2",645],["5.5.5.5",48],["1.1.1.1",270],["2.2.2.$ print "Before any sort:\n"; for ($i=0; $i<15; $i++){ print " ".$ip[$i][0]." - ".$ip[$i][1]."\n"; } print "After IP sort:\n"; @ip = sort {$a->[0] cmp $b->[0]} @ip; for ($i=0; $i<15; $i++){ print " ".$ip[$i][0]." - ".$ip[$i][1]."\n"; } print "After Time sort:\n"; @ip = sort {$a->[1] <=> $b->[1]} @ip; for ($i=0; $i<15; $i++){ print " ".$ip[$i][0]." - ".$ip[$i][1]."\n"; } НО МНЕ НУЖНО, ЧТОБЫ КОНЕЧНЫЙ РЕЗУЛЬТАТ БЫЛ ТАКИМ: 1.1.1.1 - 3 1.1.1.1 - 270 1.1.1.1 - 363 1.1.2.1 - 222 1.1.3.1 - 201 10.1.1.1 - 567 10.1.3.1 - 567 2.2.2.2 - 645 2.2.2.2 - 892 2.2.2.2 - 4567 3.3.3.3 - 743 4.4.4.4 - 53 5.5.5.5 - 48 5.5.5.5 - 555 7.7.7.7 - 1234 Т.Е. ЧТОБЫ СОРТИРОВКА ПО ВТОРОМУ СТОЛБЦУ ВЫПОЛНЯЛАСЬ ПО ГРУППАМ ПОВТОРЯЮЩИХСЯ IP АДРЕСОВ ПЕРВОГО СТОЛБЦА И НЕ ПЕРЕМЕШИВАЛА ЭТИ IP. |
Автор: alezzz 22.12.2010, 10:49 |
Попробуйте сначала сделать time sort а потом ip sort. |
Автор: loginn 22.12.2010, 11:50 |
Ха, получилось что хотел. Спасибо Вам большое. Но почему, если вначале сделать по IP, а потом по времени - то IP начинают смешиваться? Потому что значения времени уникальны, а некоторые IP повторяются, поэтому? |