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的值是4且315的值也是4。我想60先打印然后315再打印,因为60小于315(我的意思是基于key的值)。Tie::SortHash只是假设这可以使用(不确定)来完成?
更改排序以按值排序,然后按键排序:
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)