免费注册 查看新帖 |

Chinaunix

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

可以提前初始化吗? [复制链接]

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-07-10 11:17 |只看该作者 |倒序浏览
本帖最后由 sunzhiguolu 于 2016-07-10 12:04 编辑

看了篇帖子, 内容如下:
a 1
b 21
c 13
d 24
e 15
f 16
g 27
h 9
i 31
j 65
j 35
k 55

这些数字中,小于10的出现2次,10-20出现了3次,20-40出现了5次,大于40出现了2次。
如何按这个范围统计呢?

输出:
<10 2
10-20 3
20-40 5
>40 2


我的代码如下:
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. my @aStat;
  5. while (<DATA>){
  6.     my (undef, $num) = split;
  7.     my @aExpress = ("$num < 10", "$num > 10 and $num <= 20", "$num >= 20 and $num < 40", "$num > 40");
  8.     foreach (0 .. $#aExpress){
  9.         $aStat[$_]++ if (eval $aExpress[$_]);
  10.     }
  11. }
  12. printf ("<10 %d\n10-20 %d\n20-40 %d\n>40 %d\n",@aStat);

  13. __DATA__
  14. a 1
  15. b 21
  16. c 13
  17. d 24
  18. e 15
  19. f 16
  20. g 27
  21. h 9
  22. i 31
  23. j 65
  24. j 35
  25. k 55
复制代码

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
2 [报告]
发表于 2016-07-10 11:20 |只看该作者
我在这里有一个问题请教大家, 能否将第 8 行的代码:
  1. my @aExpress = ("$num < 10", "$num > 10 and $num <= 20", "$num >= 20 and $num < 40", "$num > 40");
复制代码
移到 while 循环之外, 也就是在 while 循环之外对数组 @aExpress 进行初始化 而在 while 之内只是进行比较操作, 是否可行? 还请大家指点, 谢谢大家...

论坛徽章:
6
15-16赛季CBA联赛之新疆
日期:2016-03-22 22:34:5915-16赛季CBA联赛之山东
日期:2016-04-11 09:08:41程序设计版块每日发帖之星
日期:2016-06-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-19 06:20:00每日论坛发贴之星
日期:2016-07-19 06:20:0015-16赛季CBA联赛之青岛
日期:2016-07-20 22:44:17
3 [报告]
发表于 2016-07-10 12:41 |只看该作者
本帖最后由 RE_HASH 于 2016-07-10 12:42 编辑

$num may not.
\$num should work, or use ' instead of "

评分

参与人数 1信誉积分 +10 收起 理由
sunzhiguolu + 10 超赞啊!!!

查看全部评分

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
4 [报告]
发表于 2016-07-10 13:31 |只看该作者
本帖最后由 sunzhiguolu 于 2016-07-10 14:08 编辑

回复 3# RE_HASH
真的很神奇, 您老能给个解释吗? 先谢谢大神了...
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. my @aStat;
  5. my @aExpress = ("\$num < 10", "\$num > 10 and \$num <= 20", "\$num >= 20 and \$num < 40", "\$num > 40");

  6. while (<DATA>){
  7.     my (undef, $num) = split;
  8.     foreach (0 .. $#aExpress){
  9.         $aStat[$_]++ if (eval $aExpress[$_]);
  10.     }
  11. }
  12. printf ("<10 %d\n10-20 %d\n20-40 %d\n>40 %d\n",@aStat);

  13. __DATA__
  14. a 1
  15. b 21
  16. c 13
  17. d 24
  18. e 15
  19. f 16
  20. g 27
  21. h 9
  22. i 31
  23. j 65
  24. j 35
  25. k 55
复制代码

论坛徽章:
6
15-16赛季CBA联赛之新疆
日期:2016-03-22 22:34:5915-16赛季CBA联赛之山东
日期:2016-04-11 09:08:41程序设计版块每日发帖之星
日期:2016-06-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-19 06:20:00每日论坛发贴之星
日期:2016-07-19 06:20:0015-16赛季CBA联赛之青岛
日期:2016-07-20 22:44:17
5 [报告]
发表于 2016-07-10 13:52 来自手机 |只看该作者
本帖最后由 RE_HASH 于 2016-07-10 13:52 编辑

yours: eval '1<10', eval '21<10' ...
mine: eval '$num<10' all the time.

论坛徽章:
0
6 [报告]
发表于 2016-07-10 14:07 |只看该作者
本帖最后由 L_WC 于 2016-07-10 14:59 编辑

回复 1# sunzhiguolu


RE_HASH 。。。永远都这么省墨水儿

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
7 [报告]
发表于 2016-07-10 14:09 |只看该作者
回复 5# RE_HASH
好的, 我先学习一下, 有不懂的地方再向您请教, 谢谢大神指点...

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP