我有一个在转储时具有以下数据结构的引用:
VAR1 = [
{
'0' => 0
},
{
'1' => 1
},
{
'-1' => 2
},
{
'2' => 3
},
];
我试图遍历它们并最终按键排序。以下是我的代码示例:
use strict;
use warnings;
use Data::Dumper;
my $skew_ref;
push @{$skew_ref}, { 0 => 0, 1 => 1, -1 => 2, 2 => 3, };
my @sorted;
for my $ref ( @{$skew_ref} ) {
while ( my ($k, $v ) = each %{$ref} ) {
print "$k => $v\n";
}
@sorted = sort { %{$b} <=> %{$a} } keys %{$ref};
}
print Dumper(\@sorted);
我做错了什么?我想要最小的键值,它给了我最大的值。
在这种情况下,输出应该只是2
。
答案 0 :(得分:2)
use List::Util qw( min );
my $skews = { 0 => 0, 1 => 1, -1 => 2, 2 => 3 };
my $val = $skews->{ min keys %$skews };
与您的含义相反,不能有多个结果,因为哈希不能有两个具有相同键的元素。
答案 1 :(得分:1)
回答您的直接问题:您在排序结束中交换了a
和b
:
@sorted = sort { %{$a} <=> %{$b} } keys %{$ref};
答案 2 :(得分:1)
my @sorted = map $_->[0],
sort { $a->[1] <=> $b->[1] }
map [ $_, keys %$_ ], @arr;