Сортировка хеша в perl, allexnew, 20-Июл-10, 10:24 [смотреть все]Никак не могу сообразить почему следующая конструкция не работает:
%ha = ( 25 => 23, 27 => 1, 11 => 4, 12 => 4, 34 => 1, 18 => 2, 24 => 1, 29 => 9 );foreach(sort {$ha{$a} <=> $ha{$b}} keys %ha) { ### print $_,' = ',$ha{$_},"\n"; %qqq=(%qqq, $_, $ha{$_}); } while(($key,$value) = each %qqq){ print "$key = $value \n"; }; exit;
В цикле foreach распечатка отсортированных значений проходит нормально, далее пытаюсь тут же занести ключи и значения в новый хеш, но что-то идет не так. Где ошибка?
|
- Сортировка хеша в perl, gibbon, 14:27 , 20-Июл-10 (1)
- Сортировка хеша в perl, allexnew, 15:13 , 20-Июл-10 (4)
>В перле функция keys возвращает ключи хэша вовсе не в том порядке, >в котором они заносились. >Она возвращает их в таком порядке, который ей больше нравится. >Так что отсортировать хэш у вас не получится Странно как-то это все. Чем же функция руководствуется? Ведь каждый раз возвращаются значения в определенном порядке, а не в разнобой.
- Сортировка хеша в perl, cryo, 14:48 , 20-Июл-10 (2)
- Сортировка хеша в perl, allexnew, 15:11 , 20-Июл-10 (3)
>Сделайте примерно так: > >@sorted_keys = sort {$ha{$a} <=> $ha{$b}} keys %ha); > >foreach(@sorted_keys){ > print "$_ = $ha{$_}\n"; >}; Спасибо, вроде как то, что нужно, почему то сам не допер. Только скобку еще поставить надо: @sorted_keys = (sort {$ha{$a} <=> $ha{$b}} keys %ha);foreach(@sorted_keys){ print "$_ = $ha{$_}\n"; };
|