【设计分享】perl中根据values数字值大小排列hash

【设计分享】perl中根据values数字值大小排列hash,第1张

概述在perl中,values数字值有可能是相同的,而key值也有可能相同,在这种情况下进行排序。 引用示例:文件design中第一列为cell的名字,第二列为instance的名字。第三列为对应的面积;                     统计了这个design中使用了哪些cell,并且把它们按照单个cell面积大小,以从小到大的次序打印出来; design: buffd7 I_RISC_COR

在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被区分出来

总结

以上是内存溢出为你收集整理的【设计分享】perl中根据values数字值大小排列hash全部内容,希望文章能够帮你解决【设计分享】perl中根据values数字值大小排列hash所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1276216.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存