您的位置:首页 > 产品设计 > UI/UE

【设计分享】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被区分出来

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐