【设计分享】perl中根据values数字值大小排列hash
2014-08-20 09:04
218 查看
在perl中,values数字值有可能是相同的,而key值也有可能相同,在这种情况下进行排序。
引用示例:文件design中第一列为cell的名字,第二列为instance的名字。第三列为对应的面积;
统计了这个design中使用了哪些cell,并且把它们按照单个cell面积大小,以从小到大的次序打印出来;
design:
buffd7 I_RISC_CORE/buffd7_G2B1I6
19.667700
buffda I_RISC_CORE/buffd7_G2B1I3
24.206400
buffd7 I_RISC_CORE/bufbd7_G2B1I5
19.667700
buffd4 I_RISC_CORE/buffd4_G2B1I4
12.103200
buffd4 I_RISC_CORE/bufbda_G2B1I2
12.103200
bufbd7 I_RISC_CORE/I_STACK_TOP/bufbda_G2B1I718.154800
dl01d1 I_RISC_CORE/I_DATA_PATH/U13
12.103200
dl01d1 I_RISC_CORE/I_DATA_PATH/U11
12.103200
dl01d1 I_RISC_CORE/I_DATA_PATH/U9
12.103200
dl01d1 I_RISC_CORE/I_DATA_PATH/U7
12.103200
dl01d1 I_RISC_CORE/I_DATA_PATH/U5
12.103200
dl01d1 I_RISC_CORE/I_DATA_PATH/U3
12.103200
dl01d1 I_RISC_CORE/I_DATA_PATH/U2
12.103200
dl01d1 I_RISC_CORE/I_INSTRN_LAT/U28
12.103200
dl01d1 I_RISC_CORE/I_INSTRN_LAT/U26
12.103200
dl01d1 I_RISC_CORE/I_INSTRN_LAT/U24
12.103200
dl01d1 I_RISC_CORE/I_INSTRN_LAT/U22
12.103200
dl01d1 I_RISC_CORE/I_INSTRN_LAT/U20
12.103200
dl01d1 I_RISC_CORE/I_INSTRN_LAT/U18
12.103200
dl01d1 I_RISC_CORE/I_INSTRN_LAT/U16
12.103200
dl01d1 I_RISC_CORE/I_INSTRN_LAT/U14
12.103200
dl01d1 I_RISC_CORE/I_INSTRN_LAT/U12
12.103200
dl01d1 I_RISC_CORE/I_INSTRN_LAT/U10
12.103200
dl01d1 I_RISC_CORE/I_INSTRN_LAT/U8
12.103200
dl01d1 I_RISC_CORE/I_INSTRN_LAT/U6
12.103200
dl01d1 I_RISC_CORE/I_INSTRN_LAT/U4
12.103200
dl01d1 I_RISC_CORE/I_INSTRN_LAT/U2
12.103200
..................................................................................................................
perl代码:
use 5.010;
use warnings;
use strict;
#################### Read file ############################
open my $READ_FILE,"<","/home/klin/Desktop/perl_test/0523/design" || die "$!\n" ;
my %cell;
while ( <$READ_FILE> ){
chomp;
my @tmp = split /\s+/,$_;
my $cell= shift @tmp;
my $area= pop @tmp;
$cell{$cell} = $area;
}
close $READ_FILE;
######## Different Cell May have The Same Area ##########
my @keys = sort { $cell{$a} <=> $cell{$b} } keys %cell; ## 改变a和b的位置,可以按从大到小的顺序排列
foreach(@keys){
printf "%-10s %-f\n",$_,$cell{$_};
}
运行结果:相同面积的不同cell被区分出来
引用示例:文件design中第一列为cell的名字,第二列为instance的名字。第三列为对应的面积;
统计了这个design中使用了哪些cell,并且把它们按照单个cell面积大小,以从小到大的次序打印出来;
design:
buffd7 I_RISC_CORE/buffd7_G2B1I6
19.667700
buffda I_RISC_CORE/buffd7_G2B1I3
24.206400
buffd7 I_RISC_CORE/bufbd7_G2B1I5
19.667700
buffd4 I_RISC_CORE/buffd4_G2B1I4
12.103200
buffd4 I_RISC_CORE/bufbda_G2B1I2
12.103200
bufbd7 I_RISC_CORE/I_STACK_TOP/bufbda_G2B1I718.154800
dl01d1 I_RISC_CORE/I_DATA_PATH/U13
12.103200
dl01d1 I_RISC_CORE/I_DATA_PATH/U11
12.103200
dl01d1 I_RISC_CORE/I_DATA_PATH/U9
12.103200
dl01d1 I_RISC_CORE/I_DATA_PATH/U7
12.103200
dl01d1 I_RISC_CORE/I_DATA_PATH/U5
12.103200
dl01d1 I_RISC_CORE/I_DATA_PATH/U3
12.103200
dl01d1 I_RISC_CORE/I_DATA_PATH/U2
12.103200
dl01d1 I_RISC_CORE/I_INSTRN_LAT/U28
12.103200
dl01d1 I_RISC_CORE/I_INSTRN_LAT/U26
12.103200
dl01d1 I_RISC_CORE/I_INSTRN_LAT/U24
12.103200
dl01d1 I_RISC_CORE/I_INSTRN_LAT/U22
12.103200
dl01d1 I_RISC_CORE/I_INSTRN_LAT/U20
12.103200
dl01d1 I_RISC_CORE/I_INSTRN_LAT/U18
12.103200
dl01d1 I_RISC_CORE/I_INSTRN_LAT/U16
12.103200
dl01d1 I_RISC_CORE/I_INSTRN_LAT/U14
12.103200
dl01d1 I_RISC_CORE/I_INSTRN_LAT/U12
12.103200
dl01d1 I_RISC_CORE/I_INSTRN_LAT/U10
12.103200
dl01d1 I_RISC_CORE/I_INSTRN_LAT/U8
12.103200
dl01d1 I_RISC_CORE/I_INSTRN_LAT/U6
12.103200
dl01d1 I_RISC_CORE/I_INSTRN_LAT/U4
12.103200
dl01d1 I_RISC_CORE/I_INSTRN_LAT/U2
12.103200
..................................................................................................................
perl代码:
use 5.010;
use warnings;
use strict;
#################### Read file ############################
open my $READ_FILE,"<","/home/klin/Desktop/perl_test/0523/design" || die "$!\n" ;
my %cell;
while ( <$READ_FILE> ){
chomp;
my @tmp = split /\s+/,$_;
my $cell= shift @tmp;
my $area= pop @tmp;
$cell{$cell} = $area;
}
close $READ_FILE;
######## Different Cell May have The Same Area ##########
my @keys = sort { $cell{$a} <=> $cell{$b} } keys %cell; ## 改变a和b的位置,可以按从大到小的顺序排列
foreach(@keys){
printf "%-10s %-f\n",$_,$cell{$_};
}
运行结果:相同面积的不同cell被区分出来
相关文章推荐
- 设计一个函数,根据指定长度生成对应的验证码(由数字和大小写英文字母构成的随机字符串)
- 5.一个三维数组,如何根据最后一维的数字大小正序排列,当然同时要保证索引的关联
- 数组排序数字大小,与筛选最大值最小值。冒泡比较法。。研究了好久才写出来与大家分享
- Perl Learning - 11 (hash keys, values, each, exists, delete)
- Android 根据item大小实现自动排列的GridLayout
- 【算法】 排列hash 变进制数 的理解 《Hash函数的设计优化》 李羽修
- 【算法】 排列hash 变进制数 的理解 《Hash函数的设计优化》 李羽修
- 根据数字的首字母大小排序
- Bootstrap将会根据你的屏幕的大小来调整HTML元素的大小 —— 强调 响应式设计的概念
- 数组中数字的排列大小
- 关于vb 多任意数字大小排列问题
- MYSQL-对varchar类型字段(都是数字)按照整数大小倒序排列
- 用于数字康托展开 用于求一个排列的序号或序号对应的排列或对排列的hash
- 数值类型转换根据大小排列顺序
- perl--简单的根据hash过滤替换字符串
- flex界面设计中根据用户屏幕的大小,需要设定应用程序界面的最小size 和最大size
- perl hash 根据键访问相应值
- 根据数字大小显示多少个星星
- 汇编语言: .根据《中华人民共和国国家标准GB 11643-1999》中有关公民身份号码的规定,公民 身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依 次为:六位数字地