我目前正在尝试按多维散列中的值进行排序,并且我有点难倒了。Perl:排序多维散列
我如下的单一层面做到了这一点:
my %exampleHash =();
$exampleHash{1}{value} = 10;
$exampleHash{2}{value} = 30;
$exampleHash{3}{value} = 0;
$exampleHash{4}{value} = 20;
foreach my $key (reverse sort {$exampleHash{$a}{value} <=> $exampleHash{$b}{value}} keys %exampleHash)
{
printf("%s => %d\n", $key, $exampleHash{$key}{value});
}
这将产生以下输出,排序上的价值预期:
2 => 30
4 => 20
1 => 10
3 => 0
我又试图以下做同样的事情,但有额外的键:
my %exampleHashTwo =();
$exampleHashTwo{1}{"One"}{value} = 10;
$exampleHashTwo{2}{"Two"}{value} = 30;
$exampleHashTwo{3}{"Three"}{value} = 0;
$exampleHashTwo{4}{"Four"}{value} = 20;
foreach my $intKey (keys %exampleHashTwo)
{
foreach my $stringKey (reverse sort {$exampleHashTwo{$intKey}{$a}{value} <=> $exampleHashTwo{$intKey}{$b}{value}} keys %{$exampleHashTwo{$intKey}})
{
printf("{%d} - {%5s} => %d\n", $intKey, $stringKey, $exampleHashTwo{$intKey}{$stringKey}{value});
}
}
然而,这似乎串排序按字母顺序排列。所以我假设我在正确的路线上,但是我可能放错了某些东西?
{4} - { Four} => 20
{1} - { One} => 10
{3} - {Three} => 0
{2} - { Two} => 30
任何想法?
'perldoc -q sort' – toolic