基本Perl哈希按键,按值排序,也按键AND值排序

时间:2014-11-19 03:17:47

标签: perl sorting hash

好的,我正在编写一个Perl程序,它有一些我已经收集的值(在一个完整的单独程序中)并且已经提供给这个Perl脚本。此哈希是(字符串,字符串)的哈希值。

我想以3种方式对值进行排序:首先,我想按键排序。我认为这很简单,你可以按照你想象的方式完成它,使用Perl的内置排序功能,循环键,以及打印/存储/随意分配每个键。

foreach my $name (sort keys %planets) {
    printf "%-8s %s\n", $name, $planets{$name};
}

其次,我想按价值排序。同样,这很容易,使用sort函数并循环遍历:

foreach my $name (sort { $planets{$a} <=> $planets{$b} } keys %planets) {
    printf "%-8s %s\n", $name, $planets{$name};
}

第三,我的问题是,我如何按值排序,但对于两个键之间的值中的任何联系,我首先排序具有更大值的值Asciibetical的关键。例如:

Red => 50
Yellow => 75
Blue => 75

is sorted to this, since 'Yellow' is greater asciibetically than 'Blue' 
Red 50
Blue 75
Yellow 75

1 个答案:

答案 0 :(得分:10)

在平局上,比较运算符将返回0,因此您可以将多个比较链接到||

 sort { $planets{$a} <=> $planets{$b} || $a cmp $b }