免费注册 查看新帖 |

Chinaunix

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

Perl 看不懂别人写的一段代码,麻烦高手帮我解释一下 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-10-30 11:34 |只看该作者 |倒序浏览
现在看到一个哈希表对值的排列代码,有一行不理解,麻烦大家帮我解释一下,通俗的解释一下。上个星期才刚学perl。谢谢!!!!

#!/usr/bin/perl

use strict;
use Data::Dumper;
my %h=(
"Alex"=>24,
"Sam"=>25,
"Bob"=>30,
"Andy"=>11,
"Wills"=>35,
"Mary"=>16,
"Helen"=>24
);

print(Dumper(\%h)); # output original hash



# <=>符号当左边的数字小于右边的时返回-1,相等时返回0,当左边的大于右边的时返回1

# sort排列

my @keys = sort { $h{$b} <=> $h{$a} } keys %h; #<----严重看不懂


# $_是@keys数组的值,$h{$_}相当于$h{key}

for (@keys){print "$_ -> $h{$_}\n"}

论坛徽章:
0
2 [报告]
发表于 2009-10-30 12:02 |只看该作者

回复 #1 rd16 的帖子

你执行以下,看看结果是什么样子了?

论坛徽章:
0
3 [报告]
发表于 2009-10-30 12:03 |只看该作者
# this sorts the %age hash by value instead of key
# using an in-line function
@eldest = sort { $age{$b} <=> $age{$a} } keys %age;

论坛徽章:
0
4 [报告]
发表于 2009-10-30 12:10 |只看该作者

回复 #2 Perl_Er 的帖子

谢谢Perl_Er ,执行后的结果是正确的,关键是我看不懂他是怎么排列的。
my @keys = sort { $h{$b} <=> $h{$a} } keys %h; #<----这一行能不能用通俗的语句重写下

结果如下:
Wills -> 35
Bob -> 30
Sam -> 25
Helen -> 24
Alex -> 24
Mary -> 16
Andy -> 11

论坛徽章:
0
5 [报告]
发表于 2009-10-30 12:26 |只看该作者
sort { $b <=> $a } list;
表示倒序排列。

sort { $h{$b} <=> $h{$a} } keys %h;
表示按hash的值倒序排列。

LZ再看看数组排列的相关章节。

论坛徽章:
0
6 [报告]
发表于 2009-10-30 13:09 |只看该作者
my @keys = sort { $h{$b} <=> $h{$a} } keys %h;

keys %h; 遍历hash key
使用<=>按照数字顺序对指排序 ,根据比较结果,排序子例程会返回大于、小于或者等于0的数值.

值通过引用的方式传递给子例程的,这些只会被特殊变量$a和$b所接收, 如果$a<=>$b就会按照升序的方式进行排序。如果$b<=>$a就会按照降序的方式排序,懂??
所以sort { $h{$b} <=> $h{$a} } 将是将hash中keys对应的values进行降序排列。

my @keys = sort { $h{$b} <=> $h{$a} } keys %h;是将降序排列好的key值安顺序存放到@keys中。


说来话长,你需要慢慢去理解.

[ 本帖最后由 hu145165 于 2009-10-30 13:11 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2009-10-30 21:00 |只看该作者
晕菜,找到资料了。原来{ $b <=> $a } 是perl内置的。汗,我还一直找它的原理。

论坛徽章:
0
8 [报告]
发表于 2009-11-01 12:45 |只看该作者
原帖由 rd16 于 2009-10-30 21:00 发表
晕菜,找到资料了。原来{ $b  $a } 是perl内置的。汗,我还一直找它的原理。



其实,你要是读过 learning perl 了,你就不会问了。

learning perl 很基础的,学 perl 不可不读

论坛徽章:
1
未羊
日期:2014-09-08 22:47:27
9 [报告]
发表于 2009-11-02 08:25 |只看该作者
《Perl语言入门》的确是不可多得的入门好书。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP