使用值进行哈希排序

vin*_*k89 3 sorting perl perl-hash

我有一个哈希值,如下所示。我想要keys基于其排序(升序)的列表values

如果两个不同的键具有相同的值,那么它应该keys首先打印较小的值。

让我展示一下我的示例中出了什么问题:

#!/usr/bin/perl
use strict; use warnings;
use Data::Dumper;

my %hash = (
          '11' => 1,
          '315' => 4,
          '27' => 3,
          '60' => 4,
          '8' => 3,
          '4' => 2
);

my @keys = sort { $hash{$a} <=> $hash{$b} } keys(%hash);
print Dumper(\@keys);
Run Code Online (Sandbox Code Playgroud)

电流输出:

$VAR1 = [
          '11',
          '4',
          '27',
          '8',
          '315',
          '60'
        ];
Run Code Online (Sandbox Code Playgroud)

我希望打印如下:

$VAR1 = [
          '11',
          '4',
          '8',
          '27',
          '60',
          '315'
        ];
Run Code Online (Sandbox Code Playgroud)

因为60的值是4315的值也是4。我想60先打印然后315再打印,因为60小于315(我的意思是基于key的值)。Tie::SortHash只是假设这可以使用(不确定)来完成?

too*_*lic 5

更改排序以按值排序,然后按键排序:

my @keys = sort { 
    $hash{$a} <=> $hash{$b}
        or
    $a <=> $b
} keys(%hash);
Run Code Online (Sandbox Code Playgroud)

输出:

$VAR1 = [
          '11',
          '4',
          8,
          27,
          60,
          315
        ];
Run Code Online (Sandbox Code Playgroud)

请参阅perlfaq4如何对哈希进行排序(可以选择按值而不是键)?

在命令行中,您可以使用以下命令查找常见问题:

perldoc -q sort
Run Code Online (Sandbox Code Playgroud)