免费注册 查看新帖 |

Chinaunix

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

hash一段代码没看懂,高手解释下 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-05-18 09:53 |只看该作者 |倒序浏览
#!/usr/bin/perl -w
use strict;
my %hash;

open my $fd,"aa.txt" or die $!;
while(<$fd>) {
$hash{$_} ++;  # 这句话怎么理解?
}
close $fd;
open $fd,"bb.txt" or die $!;
while(<$fd>) {
    print if $hash{$_}  ;
}
close $fd;

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
2 [报告]
发表于 2012-05-18 10:06 |只看该作者
和 $i++ 没什么区别啊,就是 $hash{$_} += 1; $hash{$_} = $hash{$_} + 1;

这里是把 aa.txt 的内容按行读入内存当个字典,然后检测 bb.txt 里面的内容是不是在 aa.txt 里面

论坛徽章:
0
3 [报告]
发表于 2012-05-18 10:16 |只看该作者
回复 2# zhlong8


    那键对应的值是不是没有内容?

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
4 [报告]
发表于 2012-05-18 10:25 |只看该作者
cocoa1227 发表于 2012-05-18 10:16
回复 2# zhlong8


有啊,是出现次数的计算,不是有个 ++ 吗?Perl 语言有个好处就是第一次出现的时候你不需要初始化下 $hash{$_} = 1;

直接 ++ 它就知道你想要的是个数字,如果不存在会自动给你创建个数字。

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
5 [报告]
发表于 2012-05-18 10:29 |只看该作者
cocoa1227 发表于 2012-05-18 10:16
回复 2# zhlong8


再比如2维数组,你直接声明个 my @lol; 不需要初始化就可以直接 $lol[$x][$y] = "something"; 它会自动会你创建个新的数组,再把它的引用赋值给 $lol[$x]。这个特性叫 autovivification 不知道中文怎么译

论坛徽章:
0
6 [报告]
发表于 2012-05-18 10:43 |只看该作者
$hash{$_}就是key=>value中的value啊,key是$_,也就是你读进来的每一行。
整个程序的作用就相当于对aa中的每一行执行grep $_ bb.txt, $_为aa中的每一行。

论坛徽章:
0
7 [报告]
发表于 2012-05-18 11:02 |只看该作者
我打日志跟踪了下,
#!/usr/bin/perl -w
use strict;
my %hash;

open my $fd,"a" or die $!;
while(<$fd>) {
        print "file a",chomp($_),"\t";
        $hash{$_} ++;  # 这句话怎么理解?
        print "keys " ,sort(keys %hash),"\t";
        print "values " ,sort(values %hash),"\n";
}
close $fd;
=cut;
open $fd,"b" or die $!;
while(<$fd>) {
    print if $hash{$_}  ;
}
close $fd;
=cut


f:>more a
a
b
c

f:>perl b.pl
file a 1    keys a values 1
file a 1    keys b values 11
file a 1    keys c values 111

问题:values 怎么不是 1 2 3??有点想不通

论坛徽章:
0
8 [报告]
发表于 2012-05-18 11:04 |只看该作者
突然明白了,不好意思,有点脑筋没转过弯来

论坛徽章:
0
9 [报告]
发表于 2012-05-18 20:11 |只看该作者
各位大仙儿:
类似的问题在
http://bbs.chinaunix.net/forum.p ... ;extra=#pid22110313
9、10楼!:wink:
请支招!谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP