对哈希引用数组进行排序

时间:2013-05-04 02:33:24

标签: perl sorting

我想使用以下代码段对哈希引用数组进行排序:

@order = sort { $VAR1->[$a]->{'tom'} <=> $VAR1->[$b]->{'tom'} } @$VAR1};

$VAR1结构如下:

$VAR1 = [
          {
            'tom' => '2.5',
            'color' => 'Johnson',
            'book' => 'ANSA',
            'dog' => 19
          }, ...

这是我在排序时遇到的错误:

Use of uninitialized value in numeric comparison (<=>) at part2.pl line 47.
Use of uninitialized value in numeric comparison (<=>) at part2.pl line 47.
Use of reference "HASH(0xa91cd8)" as array index at part2.pl line 47.
Use of reference "HASH(0xa91d68)" as array index at part2.pl line 47.
Use of uninitialized value in numeric comparison (<=>) at part2.pl line 47.
Use of uninitialized value in numeric comparison (<=>) at part2.pl line 47.
Use of reference "HASH(0xa91df8)" as array index at part2.pl line 47.
Use of reference "HASH(0xa91e88)" as array index at part2.pl line 47.
Use of uninitialized value in numeric comparison (<=>) at part2.pl line 47.
Use of uninitialized value in numeric comparison (<=>) at part2.pl line 47.
Use of reference "HASH(0xa91f18)" as array index at part2.pl line 47.
Use of reference "HASH(0xa91fa8)" as array index at part2.pl line 47.
Use of uninitialized value in numeric comparison (<=>) at part2.pl line 47.
Use of uninitialized value in numeric comparison (<=>) at part2.pl line 47.
Use of reference "HASH(0xa92038)" as array index at part2.pl line 47.
Use of reference "HASH(0xa920c8)" as array index at part2.pl line 47.
Use of uninitialized value in numeric comparison (<=>) at part2.pl line 47.
Use of uninitialized value in numeric comparison (<=>) at part2.pl line 47.
Use of reference "HASH(0xa92158)" as array index at part2.pl line 47.
Use of reference "HASH(0xb9a2c0)" as array index at part2.pl line 47.
Use of uninitialized value in numeric comparison (<=>) at part2.pl line 47.
Use of uninitialized value in numeric comparison (<=>) at part2.pl line 47.

我的问题是:用于排序的正确语法是什么?为了实现这个目标,我是否必须进行grep或map任何事情?

谢谢!

2 个答案:

答案 0 :(得分:4)

你可以写

my @order = sort { $VAR1->[$a]{tom} <=> $VAR1->[$b]{tom} } 0 .. $#$VAR1;

将索引的排序列表导入@$VAR

my @order = sort { $a->{tom} <=> $b->{tom} } @$VAR1;

以排序顺序获取@$VAR1的元素。

答案 1 :(得分:1)

这就是诀窍!

                @order = sort {$a->{'tom'} <=> $b->{'tom'}} @$VAR1;
                foreach (@order) {
                        print "$_->{color}";
                }
相关问题