免费注册 查看新帖 |

Chinaunix

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

多个哈希按value降序排序时,能否 只用1个子程序 [复制链接]

论坛徽章:
2
数据库技术版块每日发帖之星
日期:2015-10-28 06:20:00数据库技术版块每日发帖之星
日期:2015-10-29 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-12-27 14:59 |只看该作者 |倒序浏览
大家好,请教1个问题:
多个哈希按value降序排序时,能否 只用1个子程序,而不用2个呢(如果有5个或者6个哈希时,代码变得冗余)?
比如有2个哈希,按value降序排序时,可以用下面的代码实现:
  1. my (%courses, %courses1);
  2. sub desc_sort_subject {
  3. $courses{$b} <=> $courses{$a}; # Numeric sort descending
  4. }
  5. sub desc_sort_subject_1 {
  6. $courses1{$b} <=> $courses1{$a}; # Numeric sort descending
  7. }

  8. %courses = (
  9. "Portland Panthers" => 10,
  10. "Sunnyvale Sluggers" => 12,
  11. "Chico Wildcats" => 5,
  12. "Stevensville Tigers" => 6,
  13. "Lewiston Blazers" => 11,
  14. "Danville Terriors" => 8,
  15. );
  16. %courses1 = (
  17. "Portland Panthers" => 101,
  18. "Sunnyvale Sluggers" => 121,
  19. "Chico Wildcats" => 51,
  20. "Stevensville Tigers" => 61,
  21. "Lewiston Blazers" => 111,
  22. "Danville Terriors" => 81,
  23. );


  24. foreach my $key (sort desc_sort_subject keys %courses  ) {
  25. printf "\t%s%5d\n", $key, $courses{"$key"};
  26. }

  27. foreach my $key (sort desc_sort_subject_1 keys %courses1  ) {
  28. printf "\t%s%5d\n", $key, $courses1{"$key"};
  29. }
复制代码

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
2 [报告]
发表于 2015-12-27 15:27 |只看该作者
本帖最后由 sunzhiguolu 于 2015-12-27 16:21 编辑

回复 1# weichanghe2000
   
    our %hCourses;
    my (%courses, %courses1);
    sub desc_sort_subject {
    $hCourses{$b} <=> $hCourses{$a}; # Numeric sort descending
    }
   

    %courses = (
    "Portland Panthers" => 10,
    "Sunnyvale Sluggers" => 12,
    "Chico Wildcats" => 5,
    "Stevensville Tigers" => 6,
    "Lewiston Blazers" => 11,
    "Danville Terriors" => 8,
    );
    %courses1 = (
    "Portland Panthers" => 101,
    "Sunnyvale Sluggers" => 121,
    "Chico Wildcats" => 51,
    "Stevensville Tigers" => 61,
    "Lewiston Blazers" => 111,
    "Danville Terriors" => 81,
    );


    foreach my $key (sort desc_sort_subject keys {%hCourses = %courses}  ) {
    printf "\t%s%5d\n", $key, $hCourses{"$key"};
    }

    foreach my $key (sort desc_sort_subject keys {%hCourses = %courses1}  ) {
    printf "\t%s%5d\n", $key, $hCourses{"$key"};
    }


   

论坛徽章:
2
数据库技术版块每日发帖之星
日期:2015-10-28 06:20:00数据库技术版块每日发帖之星
日期:2015-10-29 06:20:00
3 [报告]
发表于 2015-12-27 16:09 |只看该作者
回复 2# sunzhiguolu


你好,非常感谢回复。

我试了下,在window上面,我安装了perl5.14,可以正确执行。
但是我在linux:redhat5.8 系统自带的perl5.8.8里面执行会报错。

可以帮忙改成能够在 perl5.8.8 里面也正确吗?
多谢。


论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
4 [报告]
发表于 2015-12-27 16:11 |只看该作者
本帖最后由 sunzhiguolu 于 2015-12-27 16:13 编辑

回复 3# weichanghe2000
把错误信息贴出来, 或者弄个图片瞧瞧...
你上传的图片都出问题了, 没法看!

   

论坛徽章:
2
数据库技术版块每日发帖之星
日期:2015-10-28 06:20:00数据库技术版块每日发帖之星
日期:2015-10-29 06:20:00
5 [报告]
发表于 2015-12-27 16:17 |只看该作者
回复 4# sunzhiguolu

好的,我这边刷新后,可以正常看到图片。
  1. Type of arg 1 to keys must be hash (not anonymous hash ({})) at 3.pl line 27, near "}  ) "
  2. Type of arg 1 to keys must be hash (not anonymous hash ({})) at 3.pl line 31, near "}  ) "
  3. Execution of 3.pl aborted due to compilation errors.
复制代码
  1. This is perl, v5.8.8 built for i386-linux-thread-multi

  2. Copyright 1987-2006, Larry Wall
复制代码

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
6 [报告]
发表于 2015-12-27 16:17 |只看该作者
本帖最后由 sunzhiguolu 于 2015-12-27 16:19 编辑

回复 3# weichanghe2000
别费事了, 这样试下:
%hCourses = %courses;
foreach my $key (sort desc_sort_subject keys %hCourses  ) {
    printf "\t%s%5d\n", $key, $hCourses{"$key"};
    }


   

论坛徽章:
2
数据库技术版块每日发帖之星
日期:2015-10-28 06:20:00数据库技术版块每日发帖之星
日期:2015-10-29 06:20:00
7 [报告]
发表于 2015-12-27 16:21 |只看该作者
回复 6# sunzhiguolu


多谢,这样真的可以。
在redhat5.8的perl5.8.8里面按照value降序排序了,而且不报错。

再次感谢您的帮助。

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
8 [报告]
发表于 2015-12-27 22:04 |只看该作者
本帖最后由 jason680 于 2015-12-27 23:49 编辑

回复 1# weichanghe2000

Would you like this way ...

sub sort_by_subject_desc(+) {
  my ($rhCour) = @_;
  return sort {$rhCour->{$b} <=> $rhCour->{$a}} keys %{$rhCour};
}


foreach my $key (sort_by_subject_desc(%courses)) {
  printf "\t%s%5d\n", $key, $courses{"$key"};
}

foreach my $key (sort_by_subject_desc(%courses1)) {
  printf "\t%s%5d\n", $key, $courses1{"$key"};
}

   

评分

参与人数 1信誉积分 +10 收起 理由
sunzhiguolu + 10 向您学习了.

查看全部评分

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
9 [报告]
发表于 2015-12-27 23:00 |只看该作者
回复 7# weichanghe2000
使用 Jason680 大神提供的方法吧.

   

论坛徽章:
2
数据库技术版块每日发帖之星
日期:2015-10-28 06:20:00数据库技术版块每日发帖之星
日期:2015-10-29 06:20:00
10 [报告]
发表于 2015-12-27 23:14 |只看该作者
回复 8# jason680

非常感谢。
但是 sub sort_by_subject_desc(+) {

(+)  这里面的 + 号是什么意思哦?没有见过这样的用法。

请帮忙解答下哈。
多谢。
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP