sort 函数排序问题

sort 函数排序问题

由于程序需要,我建立了如下数据结构的hash:

     # %record = (
        #                               "dump" = (
        #                                                               name    => "dump",
        #                                                               times   => 123,
        #                                                               lastrun => "20071007",
        #                                                               lastuser=> "myname"
        #                                                       )
        #  )



现在我需要按照times从大到小排序,怎么也不行?当然我可以有两种办法来避免这个问题,一是改变数据结构;二是写排序程序。但是我想这里能不能通过sort来实现呢?

我试了下面的方法:
my %top = sort { $record{$b}->{'times'} <=> $record{$a}->{'times'}} values %record;

结果:没有报错,但是不能排序。

my %top = sort { $record{$b}->{'times'} <=> $record{$a}->{'times'}} keys %record;

结果:报错了,似乎是Hash ref不能指引。


对sort不是很熟,也很少用过这种比较复杂的数据结构。


请高手指点,不胜感激!
hash本身是无须的, 你只有将排序后的Keys放到List

my @array = sort { $record{$b}->{'times'} <=> $record{$a}->{'times'} } keys %record;

foreach (@array) {
    print $record{$_}->{times}, "\n";
}
Cool! it works.

我前面也试过把排序内容放到@array里面,只是后面foreach的时候变成操作@array的东西,而忘记重新启用%record了,其实这个时候@array里面是排好序的每个记录的地址引用。对这个还不是很熟。呵呵

非常感谢你的帮助。
for( sort { $record{$b}->{'times'} <=> $record{$a}->{'times'} } keys %record )
{
   print "$record{$b}->{'times'}\n";
}