对哈希数组进行排序

时间:2014-10-31 18:48:09

标签: perl sorting reference

我有一个在转储时具有以下数据结构的引用:

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

3 个答案:

答案 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)

回答您的直接问题:您在排序结束中交换了ab

@sorted = sort { %{$a} <=> %{$b} } keys %{$ref};

答案 2 :(得分:1)

my @sorted = map $_->[0], 
  sort { $a->[1] <=> $b->[1] } 
  map [ $_, keys %$_ ], @arr;