有人可以告诉我我在做什么错吗?我已经尝试过几乎可以想到的数组/哈希类型和排序查询的所有可能组合,但似乎无法使它正常工作。
我正在尝试按以下方式对哈希引用进行排序value1
:
my $test = {
'1' => { 'value1' => '0.001000', 'value2' => 'red'},
'2' => { 'value1' => '0.005000', 'value2' => 'blue'},
'3' => { 'value1' => '0.002000', 'value2' => 'green'},
'7' => { 'value1' => '0.002243', 'value2' => 'violet'},
'9' => { 'value1' => '0.001005', 'value2' => 'yellow'},
'20' => { 'value1' => '0.0010200', 'value2' => 'purple'}
};
使用此排序循环:
foreach (sort { $test{$a}->{'value1'} <=> $test{$b}->{'value1'} } keys \%{$test} ){
print "key: $_ value: $test->{$_}->{'value1'}\n"
}
我得到:
key: 1 value: 0.001000
key: 3 value: 0.002000
key: 7 value: 0.002243
key: 9 value: 0.001005
key: 2 value: 0.005000
key: 20 value: 0.0010200
我尝试使用整数,似乎发生了同样的事情。
我实际上并不需要遍历散列,我只是希望将其排序以便以后使用。使用哈希数组很容易,但是使用哈希哈希则不容易。
不要在参考上调用键。在实际的哈希上调用它。
另外,this$test{$a}->
应该是$test->{$a}
,因为它$test
是一个哈希引用。
foreach (sort { $test->{$a}{'value1'} <=> $test->{$b}{'value1'} } keys %{$test} ){
print "key: $_ value: $test->{$_}->{'value1'}\n"
}
如果你已经use strict;
和use warnings;
打开,你会已经得到了下面的错误,提醒您一个问题:
Global symbol "%test" requires explicit package name
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句