Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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 повторяются, поэтому? 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)