Chinaunix首页 | 论坛 | 博客
  • 博客访问: 69666
  • 博文数量: 13
  • 博客积分: 247
  • 博客等级: 二等列兵
  • 技术积分: 138
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-02 18:17
文章分类

全部博文(13)

文章存档

2015年(1)

2014年(1)

2013年(1)

2012年(2)

2011年(8)

我的朋友

分类: 系统运维

2011-08-09 19:56:10

Exercise 2:
  1. #! /usr/bin/perl -w
  2. use strict;

  3. my %total_bytes;
  4. my %bytes_sources;
  5. while(<>)
  6. {
  7.     next if /^#/;
  8.     my ($source,$dest,$bytes) = split;
  9.     $total_bytes{$source}{$dest} += $bytes;
  10. }

  11. #### print the hash according to the bytes of sources
  12. foreach my $source(keys %total_bytes)
  13. {
  14.     foreach my $dest (keys %{$total_bytes{$source}})
  15.     {
  16.         $bytes_sources{$source} += $total_bytes{$source}{$dest};
  17.     }
  18. }
  19. my %inverse_hash = reverse %bytes_sources;
  20. foreach my $bytes(reverse sort {$a <=> $b} keys %inverse_hash)
  21. {
  22.     my $source = $inverse_hash{$bytes};
  23.     printf "Source:%-30ssource_total_bytes:%s\n",${source},$bytes;
  24.     my %inverse_dest = reverse (%{$total_bytes{$source}});
  25.     foreach my $destnum(reverse sort {$a <=> $b}keys %inverse_dest)
  26.     {
  27.         printf "\t\tDest:%-20s\tdest_bytes_from_this_source:%s\n",$inverse_dest{$destnum},$destnum;
  28.     }
  29. }
  30. print "\n";

总结:

1.根据原hash的key=>value对建立反向hash的方法:my %inverse_hash = reverse %hash;

2.默认的排序程序根据ascii码顺序来排序列表元素,可以使用subroutine来进行指定高级排序的顺序.如按值排序的方法:

 

  1. sort { $a <=> $b} @array; ######code block can be placed directly within brackets
  2. #####sort using subroutine
  3. sub my_sort_routine
  4. {
  5. ...
  6. }
  7. sort my_sort_routine @array;
  8. ######sort from most to least
  9. reverse sort {$a <=> $b} @array;
阅读(1516) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

regansong2011-08-09 20:04:53

小松加油