在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2320|回复: 3

[求助] perl 排序 两个 限制条件

[复制链接]
发表于 2013-10-7 21:39:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 ic_seu 于 2013-10-8 16:04 编辑

题目:给出5个人的薪水,其中有三个人的是一样的,请用perl排列出薪水值由大到小,薪水一样的按照姓名的ACSII大小值排列。

请问,这个是如何实现? 用sort or 也没想明白。

网上找了个,例子有疑问:
1.employees数组的元素是怎么组织的? 为什么第二次是‘{}’ 而不是‘()’?






  1. @employees = (
  2.   { FIRST =>'Bill',   LAST =>'Gates',   
  3.     SALARY => 600000, AGE =>; 45 },
  4.   { FIRST =>'George', LAST =>'Tester'  
  5.     SALARY =>55000, AGE =>29 },
  6.   { FIRST =>'Steve', LAST =>'Ballmer',  
  7.     SALARY =>600000, AGE =>41 }
  8.   { FIRST =>'Sally', LAST => 'Developer',
  9.     SALARY =>55000, AGE =>29 },
  10.   { FIRST =>'Joe',   LAST =>'Tester',  
  11.     SALARY =>55000, AGE =>29 },
  12. );
  13. sub seniority {
  14.   $b->{SALARY}   <=> $a->{SALARY}
  15.   or $b->{AGE}   <=> $a->{AGE}
  16.   or $a->{LAST}   cmp $b->{LAST}
  17.   or $a->{FIRST}   cmp $b->{FIRST}
  18. }
  19. @ranked = sort seniority @employees;
  20. foreach $emp (@ranked) {
  21.   print "$emp->{SALARY}$emp->{AGE}$emp->{FIRST}$emp->{LAST} /n";
  22. }

  23. 打印结果是:
  24. 600000 45     Bill Gates600000 41     Steve Ballmer
  25. 55000   29     Sally Developer
  26. 55000   29     George Tester
  27. 55000   29     Joe Tester




复制代码
发表于 2013-10-7 22:21:34 | 显示全部楼层
不懂呵呵
发表于 2013-10-14 11:54:52 | 显示全部楼层
{}是hash, @employees是一个以hash为元素的数组,这里的hash表示了每个employee的salary age等信息。 sort or对比较项的优先排序。按你的意思把
or  $a->{FIRST}   cmp $b->{FIRST}放到第二行就可以了。
发表于 2013-10-19 18:46:00 | 显示全部楼层
学习一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /3 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-20 20:53 , Processed in 0.023684 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表