免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3122 | 回复: 3
打印 上一主题 下一主题

sort 函数排序问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-13 00:33 |只看该作者 |倒序浏览
由于程序需要,我建立了如下数据结构的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不是很熟,也很少用过这种比较复杂的数据结构。


请高手指点,不胜感激!

论坛徽章:
0
2 [报告]
发表于 2007-10-13 01:11 |只看该作者
hash本身是无须的, 你只有将排序后的Keys放到List

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

foreach (@array) {
    print $record{$_}->{times}, "\n";
}

论坛徽章:
0
3 [报告]
发表于 2007-10-13 01:52 |只看该作者
Cool! it works.

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

非常感谢你的帮助。

论坛徽章:
0
4 [报告]
发表于 2007-10-14 15:16 |只看该作者
for( sort { $record{$b}->{'times'} <=> $record{$a}->{'times'} } keys %record )
{
   print "$record{$b}->{'times'}\n";
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP