请教perl循环问题
时间:2010-11-03
来源:互联网
两个文件
第一个文件两列,每行的两列数字构成一个区间,
11 20
30 50
等等
另外一个是一列数字,
类似,
12
15
30
45
50
等等
问题是想统计一下第2个文件中落在第一个文件中的数字的个数,例如,12落在了11 20之间,那么$hash{11 20}++一次,最后输出第一文件每行出现的次数。
关键的问题是每个文件都好几万行,循环起来比较慢,我想请教大家有什么好的建议,谢谢
第一个文件两列,每行的两列数字构成一个区间,
11 20
30 50
等等
另外一个是一列数字,
类似,
12
15
30
45
50
等等
问题是想统计一下第2个文件中落在第一个文件中的数字的个数,例如,12落在了11 20之间,那么$hash{11 20}++一次,最后输出第一文件每行出现的次数。
关键的问题是每个文件都好几万行,循环起来比较慢,我想请教大家有什么好的建议,谢谢
作者: liuguiyou1981 发布时间: 2010-11-03
本帖最后由 zhlong8 于 2010-11-03 14:49 编辑
第一个文件的数字区间有交集没有? 总的范围有多大? 全都是整数吗? 闭区间还是左开右闭什么的?
所有区间范围小的话可以用list的index做键
比如建立个list
list:
[0][1][2]...[n]
第二个文件按你的规则把相当位的值加一,最后再读第一个文件,分析每个区间的数字个数
第一个文件的数字区间有交集没有? 总的范围有多大? 全都是整数吗? 闭区间还是左开右闭什么的?
所有区间范围小的话可以用list的index做键
比如建立个list
list:
[0][1][2]...[n]
第二个文件按你的规则把相当位的值加一,最后再读第一个文件,分析每个区间的数字个数
作者: zhlong8 发布时间: 2010-11-03
回复 zhlong8
没有交集,总的范围不固定,最多上千,都是整数,都是闭区间
没有交集,总的范围不固定,最多上千,都是整数,都是闭区间
作者: liuguiyou1981 发布时间: 2010-11-03
- my @info;
- my %result; #保存结果的hash
- sub sum_from;
-
-
- open my $f, '<', 'file2' or die $!;
-
- while (<$f>) {
- chomp;
- $info[$_]++; #因为最多上千,所以不会产生超大的array
- }
-
- close $f;
-
- open $f, '<', 'file1' or die $!;
-
- while (<$f>) {
- chomp;
- my($from, $to) = split /\s/;
- $result{"$from $to"} = sum_of $from, $to;
- }
-
- sub sum_from {
- my($from, $to) = @_;
- my $sum = 0;
- for (my $i=$from, $i<=$to; $i++) {
- $sum += $info[$i];
- }
- }
作者: zhlong8 发布时间: 2010-11-03
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28