Forum Webscript.Ru

Программирование => Perl => Тема начата: Hob от 01 Декабря 2006, 19:16:00

Название: Сортировка массива хэшей
Отправлено: Hob от 01 Декабря 2006, 19:16:00
Здравствуйте,

Есть массив такого вида:

push @users, {\'ID\'=>$userid, \'USER\'=>$usernick, \'STATUS\'=>$status, \'N\'=>$n};

Создал функцию:

sub sortmh {
 my ($mas,$key) = @_;
 $mas = [ sort {$a->{$key}<=>$b->{$key}} @$mas ];
}

sortmh(\\@users, \'N\');

Не подскажете, почему он неправильно сортирует?
Название: Сортировка массива хэшей
Отправлено: NeoNox от 01 Декабря 2006, 19:25:05
Что значит неправильно? Что в $n? Если цифры - то правильно.
Название: Сортировка массива хэшей
Отправлено: Hob от 01 Декабря 2006, 21:23:05
NeoNox
Цифры.

У меня потом заполняется js массив значениями. Я предполагаю, что он должен отсортироваться при заполнении, а он так и остаётся 2 1 4 6 (по N)

var allUsers = new Array([% FOREACH U = USERS %][% U.ID %],\'[% U.USER %]\',\'[% U.STATUS %]\',[% U.N %],[% END %]0);
Название: Сортировка массива хэшей
Отправлено: NeoNox от 01 Декабря 2006, 22:23:10
А перл тут при чем? Ищите проблему в другом месте.
Не умеете локализовать проблему? Я помогу:
#!/usr/bin/perl

use Data::Dumper;

for (40..49)
{
       push @users, {\'ID\'=>\'userid\'.$_ , \'USER\'=>"usernick".$_, \'STATUS\'=>"status".$_, \'N\'=>$_};
}


for (1..3)
{
       push @users, {\'ID\'=>\'userid\'.$_ , \'USER\'=>"usernick".$_, \'STATUS\'=>"status".$_, \'N\'=>$_};
}



sub sortmh {
       my ($mas,$key) = @_;
       print Dumper(@$mas);
       print "========================================\\n";
       $mas = [ sort {$a->{$key}<=>$b->{$key}} @$mas ];
       print Dumper(@$mas);
}

sortmh(\\@users, \'N\');


Цитировать
$VAR1 = {
         \'ID\' => \'userid40\',
         \'N\' => 40,
         \'STATUS\' => \'status40\',
         \'USER\' => \'usernick40\'
       };
$VAR2 = {
         \'ID\' => \'userid41\',
         \'N\' => 41,
         \'STATUS\' => \'status41\',
         \'USER\' => \'usernick41\'
       };
$VAR3 = {
         \'ID\' => \'userid42\',
         \'N\' => 42,
         \'STATUS\' => \'status42\',
         \'USER\' => \'usernick42\'
       };
$VAR4 = {
         \'ID\' => \'userid43\',
         \'N\' => 43,
         \'STATUS\' => \'status43\',
         \'USER\' => \'usernick43\'
       };
$VAR5 = {
         \'ID\' => \'userid44\',
         \'N\' => 44,
         \'STATUS\' => \'status44\',
         \'USER\' => \'usernick44\'
       };
$VAR6 = {
         \'ID\' => \'userid45\',
         \'N\' => 45,
         \'STATUS\' => \'status45\',
         \'USER\' => \'usernick45\'
       };
$VAR7 = {
         \'ID\' => \'userid46\',
         \'N\' => 46,
         \'STATUS\' => \'status46\',
         \'USER\' => \'usernick46\'
       };
$VAR8 = {
         \'ID\' => \'userid47\',
         \'N\' => 47,
         \'STATUS\' => \'status47\',
         \'USER\' => \'usernick47\'
       };
$VAR9 = {
         \'ID\' => \'userid48\',
         \'N\' => 48,
         \'STATUS\' => \'status48\',
         \'USER\' => \'usernick48\'
       };
$VAR10 = {
          \'ID\' => \'userid49\',
          \'N\' => 49,
          \'STATUS\' => \'status49\',
          \'USER\' => \'usernick49\'
        };
$VAR11 = {
          \'ID\' => \'userid1\',
          \'N\' => 1,
          \'STATUS\' => \'status1\',
          \'USER\' => \'usernick1\'
        };
$VAR12 = {
          \'ID\' => \'userid2\',
          \'N\' => 2,
          \'STATUS\' => \'status2\',
          \'USER\' => \'usernick2\'
        };
$VAR13 = {
          \'ID\' => \'userid3\',
          \'N\' => 3,
          \'STATUS\' => \'status3\',
          \'USER\' => \'usernick3\'
        };
========================================
$VAR1 = {
         \'ID\' => \'userid1\',
         \'N\' => 1,
         \'STATUS\' => \'status1\',
         \'USER\' => \'usernick1\'
       };
$VAR2 = {
         \'ID\' => \'userid2\',
         \'N\' => 2,
         \'STATUS\' => \'status2\',
         \'USER\' => \'usernick2\'
       };
$VAR3 = {
         \'ID\' => \'userid3\',
         \'N\' => 3,
         \'STATUS\' => \'status3\',
         \'USER\' => \'usernick3\'
       };
$VAR4 = {
         \'ID\' => \'userid40\',
         \'N\' => 40,
         \'STATUS\' => \'status40\',
         \'USER\' => \'usernick40\'
       };
$VAR5 = {
         \'ID\' => \'userid41\',
         \'N\' => 41,
         \'STATUS\' => \'status41\',
         \'USER\' => \'usernick41\'
       };
$VAR6 = {
         \'ID\' => \'userid42\',
         \'N\' => 42,
         \'STATUS\' => \'status42\',
         \'USER\' => \'usernick42\'
       };
$VAR7 = {
         \'ID\' => \'userid43\',
         \'N\' => 43,
         \'STATUS\' => \'status43\',
         \'USER\' => \'usernick43\'
       };
$VAR8 = {
         \'ID\' => \'userid44\',
         \'N\' => 44,
         \'STATUS\' => \'status44\',
         \'USER\' => \'usernick44\'
       };
$VAR9 = {
         \'ID\' => \'userid45\',
         \'N\' => 45,
         \'STATUS\' => \'status45\',
         \'USER\' => \'usernick45\'
       };
$VAR10 = {
          \'ID\' => \'userid46\',
          \'N\' => 46,
          \'STATUS\' => \'status46\',
          \'USER\' => \'usernick46\'
        };
$VAR11 = {
          \'ID\' => \'userid47\',
          \'N\' => 47,
          \'STATUS\' => \'status47\',
          \'USER\' => \'usernick47\'
        };
$VAR12 = {
          \'ID\' => \'userid48\',
          \'N\' => 48,
          \'STATUS\' => \'status48\',
          \'USER\' => \'usernick48\'
        };
$VAR13 = {
          \'ID\' => \'userid49\',
          \'N\' => 49,
          \'STATUS\' => \'status49\',
          \'USER\' => \'usernick49\'
        };


Ищите в темплейте что не так.