Есть хэш хэшей вида:%list = (
Ivanov => {
fio => "Иванов А.А.",
address => "192.168.1.1",
ostatok => -311.22,
},
Petrov => {
fio => "Петров Б.Б.",
address => "192.168.1.2",
ostatok => 1100.54,
},
...
);Вывод производится так:
foreach $k (sort keys %list) {
print $list{$k}{fio}.":".$list{$k}{address}.":".$list{$k}{ostatok}."\n";
}Посоветуйте, как описать sort{ ля{$b} <=> ля{$a} }, чтобы организовать вывод списка, отсортированного по размеру остатка.
Короткий путь -- заменть
sort keys %list
на
sort {$list{$a}{'ostatok'} <=> $list{$b}{'ostatok'}} keys %listно на больших массивах это будет протормаживать. Правильнее в таких случаях использовать преобразование рендола-шварца. В данном случае оно вот так выглядет:
map {$_->[1]} sort {$a->[0] <=> $b->[0]} map {[$list{$_}{'ostatok'}, $_]} keys(%list)
оно чуть медленней на маленьких списках, но на больших на много быстрей
Благодарю
>Посоветуйте, как описать sort{ ля{$b} <=> ля{$a} }, чтобы организовать вывод списка, отсортированного по размеру остатка.Самый очевидный вариант:
sort {$list{$a}{ostatok} <=> $list{$b}{ostatok}}