免费注册 查看新帖 |

Chinaunix

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

请教,统计各学院的人数(初试perl6) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-09-01 08:54 |只看该作者 |倒序浏览
本帖最后由 w123456_cu 于 2015-09-01 08:56 编辑

newstudents.txt
---------------------------------------------------------
文学院                广告学                        51
文学院                汉语文学                        261
外国语学院                俄语                                30
外国语学院                法语                                30
生命科学学院        园艺                                60
--------------------------------------------------------
  1. use v6;

  2. my %hash;
  3. my int $total;


  4. for 'newstudents.txt'.IO.lines -> $line {
  5.       my ($college,$dep,$num) = $line.words;
  6.          %hash{$college}{$dep} = $num;
  7.          $total += $num;
  8. }


  9.   for %hash.kv -> $k , $v {
  10.         my $sum;
  11.         for %hash{$k}.kv -> $kk, $vv {
  12.          $sum  += $vv;
  13.         }
  14.           say "-" x 50;
  15.           say "$k \t $sum "
  16. }
复制代码
统计各学院的合计人数,最终希望是:
--------------------------------
              文学院                        312
        外国语学院                        60
      生命科学学院                        60
---------------------------------


问题:
1,代码好像很臃肿
2,第一行总是要空格,而且多出一行。

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
2 [报告]
发表于 2015-09-01 09:37 |只看该作者
本帖最后由 104359176 于 2015-09-01 09:37 编辑

数据结构,算法都有问题,hash 的键只能有一个,多余的会被合并。

记录最好用 array
  1. for 'file'.IO.lines -> $line {
  2.      my ($a, $b, $c) = $line.words;
  3.      push @array, [$a, $b, $c];
  4. }
复制代码
你先用 Perl5 实现,就知道问题了。

另外 Perl6 对中文的支持不太好,你先用字母代替中文名称。

遍历 Hash 通常是这样:
  1. for %hask -> $pair {
  2.     my ($key, $value) = $pair;
  3.     ...
  4. }
复制代码

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
3 [报告]
发表于 2015-09-01 09:40 |只看该作者
另外,分隔符最好不要用 tab, 在显示中可能会长度不同,最好用 空格。

论坛徽章:
0
4 [报告]
发表于 2015-09-01 09:50 |只看该作者
本帖最后由 w123456_cu 于 2015-09-01 12:37 编辑

谢谢104359176 受教  受教

不过,不用hash 怎么进行分类统计?

论坛徽章:
0
5 [报告]
发表于 2015-09-01 14:50 |只看该作者
  1. my $student = open 'student.txt';
  2. my %h;
  3. for $student.lines {
  4.     my ($k, $v) = .words[0,2];
  5.     %h{$k} += $v;
  6. }

  7. say %h.fmt;

  8. # 文学院        312
  9. # 生命科学学院        60
  10. # 外国语学院        60
  11. # ----------------------------------


  12. # OR
  13. #      文学院        312
  14. # 生命科学学院        60
  15. #   外国语学院        60

  16. my $max = %h.keys.map(*.chars).max;

  17. for %h.kv -> $k, $v {
  18.     my $len = $max - $k.chars;
  19.     say '  ' x $len, $k, "\t", $v;
  20. }

复制代码

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
6 [报告]
发表于 2015-09-01 17:00 |只看该作者
w123456_cu 发表于 2015-09-01 09:50
谢谢104359176 受教  受教

不过,不用hash 怎么进行分类统计?


Why?

论坛徽章:
0
7 [报告]
发表于 2015-09-01 20:03 |只看该作者
学习不到位,还请@MMMIX 给指导指导。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP