免费注册 查看新帖 |

Chinaunix

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

关于统计每一区间内变量数目的问题 [复制链接]

论坛徽章:
2
巨蟹座
日期:2014-05-21 16:42:40巳蛇
日期:2014-05-22 08:44:29
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-09-01 20:29 |只看该作者 |倒序浏览
我现在有一批数据,我想将其分成100个组(从10到1000),我想统计一下落入每个区间的数据的个数,如果用if...else结构的话如下:
  1. if ($number<10)
  2. {$sum1+=1;}
  3. elsif(($number<=20) & ($number >10 ))
  4. {$sum2+=1;}
  5. .....
复制代码
感觉好麻烦,要写将近100遍,请问有没有简单的方法?

论坛徽章:
6
丑牛
日期:2014-03-21 15:42:04子鼠
日期:2014-04-12 11:50:17处女座
日期:2014-09-01 09:25:1115-16赛季CBA联赛之吉林
日期:2015-12-22 14:01:5215-16赛季CBA联赛之广东
日期:2016-03-08 18:49:422016科比退役纪念章
日期:2016-07-06 12:19:55
2 [报告]
发表于 2013-09-01 21:24 |只看该作者
虽然有点看不懂,但偶这有个类似的小例子,统计@nums的数字的区间{:3_193:}
  1. #!perl
  2. use strict;

  3. my @nums = (1 .. 300);

  4. my $data_href = +{};
  5. for (my $var = 10; $var < 1000; $var += 10) {
  6.     $data_href->{"@{ [ $var - 10 ] }to$var"} = grep {$_ <= $var and $_ > $var - 10} @nums;
  7. }

  8. for my $key (keys %{$data_href}){
  9.     print "$key => $data_href->{$key}\n";
  10. }
  11. __END__
复制代码

论坛徽章:
0
3 [报告]
发表于 2013-09-01 21:29 |只看该作者
大概想法:除以10取整

如92,运算后在9~10之间
985运算后在98和99之间
计数器num1、num2。。在顺序数组里,然后直接相应元素加1

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
4 [报告]
发表于 2013-09-01 22:08 |只看该作者
  1. #!/usr/bin/perl
  2. use 5.018;
  3. my %num;
  4. while (<DATA>) {
  5.     $num{ int( $_ / 10 ) + 1 }++;
  6. }

  7. say "num2 = $num{2}";
  8. say "num$_\t= $num{$_}" for sort { $a <=> $b } keys %num;

  9. __DATA__
  10. 1
  11. 10
  12. 11
  13. 23
  14. 22
  15. 25
  16. 33
  17. 35
  18. 39
  19. 30
  20. 100
  21. 109
  22. 150
  23. 152
  24. 1111
  25. 1112
  26. 1113
复制代码

论坛徽章:
2
巨蟹座
日期:2014-05-21 16:42:40巳蛇
日期:2014-05-22 08:44:29
5 [报告]
发表于 2013-09-01 22:56 |只看该作者
我问题的意思是这样,比如我有一批数据(1,2,4,5,8....999),我这有100个区间(10,2,0,30,40...1000,共100个),我想统计一下这批数据落入每个区间的数目:wink:

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
6 [报告]
发表于 2013-09-01 23:50 |只看该作者
try:
  1. #!/usr/bin/perl
  2. use 5.018;
  3. my %num;
  4. while (<DATA>) {
  5.     $num{ int( $_ / 10 ) + 1 }++;
  6. }
  7. say $_ * 10, " \t= ", $num{$_} // 0 for 1 .. 100;

  8. __DATA__
  9. 1
  10. 10
  11. 11
  12. 23
  13. 22
  14. 25
  15. 33
  16. 35
  17. 39
  18. 30
  19. 100
  20. 109
  21. 150
  22. 152
  23. 990
  24. 998
  25. 999
复制代码

论坛徽章:
2
巨蟹座
日期:2014-05-21 16:42:40巳蛇
日期:2014-05-22 08:44:29
7 [报告]
发表于 2013-09-06 10:31 |只看该作者
弱弱的问一句,“//”是什么意思呢?

论坛徽章:
1
金牛座
日期:2014-03-21 18:22:34
8 [报告]
发表于 2013-09-06 18:01 |只看该作者
看看大牛的解法

论坛徽章:
7
巳蛇
日期:2014-04-10 08:54:57白羊座
日期:2014-04-22 20:06:262015年亚洲杯之沙特阿拉伯
日期:2015-02-10 14:18:532015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之吉达阿赫利
日期:2015-06-02 11:34:112015亚冠之武里南联
日期:2015-06-24 12:13:082015亚冠之阿尔纳斯尔
日期:2015-08-03 09:08:25
9 [报告]
发表于 2013-09-06 18:18 |只看该作者
回复 7# skyyy90


    "//",defined or,左边的表达式为defined话结果就是左边的值,否则返回右边的值
可以与"||"进行比较,"||"判断左边是否为真,左边如果没有定义(undefined)则一定为假,但是即使左边有定义(defined),也有可能为假。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP