基本的Perl哈希排序可以按键排序,按值排序,还可以按键和值同时排序。

3

好的,我正在写一个Perl程序,其中有一个值哈希表。这些值是我在一个完全不同的程序中收集的,并被传递到这个Perl脚本中。这个哈希表的键和值都是字符串。

我想按三种方式对这些值进行排序:首先,我想按键排序。 我认为这很容易,您只需使用Perl的内置sort函数,循环遍历键,并随着它们的排序打印/存储/处理等操作即可。

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};
}

第三,我的问题是如何按值排序,但对于两个键之间的任何并列值,我首先将具有更大ASCII字母数字键的值排序。例如:

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

is sorted to this, since 'Yellow' is greater asciibetically than 'Blue' 
Red 50
Blue 75
Yellow 75
1个回答

10

在两个值相等的情况下,比较运算符会返回0,因此您可以使用||来链接多个比较:

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

嘿,现在正在查看这个。您的答案已被阅读并考虑! - Musicode

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接