Никак не могу сообразить почему следующая конструкция не работает:
%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 распечатка отсортированных значений проходит нормально, далее пытаюсь тут же занести ключи и значения в новый хеш, но что-то идет не так. Где ошибка?
В перле функция keys возвращает ключи хэша вовсе не в том порядке, в котором они заносились.
Она возвращает их в таком порядке, который ей больше нравится.
Так что отсортировать хэш у вас не получится
>В перле функция keys возвращает ключи хэша вовсе не в том порядке,
>в котором они заносились.
>Она возвращает их в таком порядке, который ей больше нравится.
>Так что отсортировать хэш у вас не получитсяСтранно как-то это все. Чем же функция руководствуется? Ведь каждый раз возвращаются значения в определенном порядке, а не в разнобой.
>Странно как-то это все. Чем же функция руководствуется? Ведь каждый раз возвращаются
>значения в определенном порядке, а не в разнобой.Читайте что такое хэш и как он устроен.
Сделайте примерно так:@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";
>};Спасибо, вроде как то, что нужно, почему то сам не допер. Только скобку еще поставить надо:
@sorted_keys = (sort {$ha{$a} <=> $ha{$b}} keys %ha);foreach(@sorted_keys){
print "$_ = $ha{$_}\n";
};
print "$_ = $ha{$_}\n" for sort keys %ha;