Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > сортировка массива хешей


Автор: hatalsky 29.12.2010, 23:14
Код

~$ perl -e '@a=((id => 1),(id => 5),(id => 2));print sort { $a->{"id"} <=> $b->{"id"} } @a; print "\n";'
id1id5id2

кто-нить может объяснить что здесь не так, и рассказать как сделать правильно?

Автор: Jimy 29.12.2010, 23:35
Код

@a=((id => 1),(id => 5),(id => 2));

Это не массив хэшей. Это просто массив.
В перле (может конечно сейчас скажу глупость) нельзя создать структура данных "масив хэшей" в чистом виде. Можно сделать массив ссылок на хэши.
Тогда это должно быть записано вот так:
Код

@a=({id => 1},{id => 5},{id => 2});

А дальше у Вас все правильно. При сравнении обращение идет через ссылку.

Автор: hatalsky 30.12.2010, 00:43
о_О, спасибо большое, что-то я сглупил(

Автор: myth777 30.12.2010, 15:46
вот как у меня сделана сортировка массива хэшей. сортируется по значению task_id


Код

sub sort
{  my($mas) = @_;
  @$mas = sort { $a->{task_id} <=> $b->{task_id} } @$mas;
}

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