我想使用以下代码段对哈希引用数组进行排序:
@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任何事情?
谢谢!
答案 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}";
}