【发布时间】:2014-05-19 23:17:35
【问题描述】:
谁能告诉我我在这里做错了什么?我已经尝试了几乎所有我能想到的数组/哈希类型和排序查询的组合,但似乎无法让它发挥作用。
我正在尝试按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
我尝试过使用整数,但似乎发生了同样的事情。
我实际上不需要循环遍历哈希,我只是希望它被订购以供以后使用。使用哈希数组很容易,但使用哈希哈希就不那么容易了..?
【问题讨论】:
-
回复。 “我实际上不需要遍历哈希,我只是希望它被订购以供以后使用。”您无法对哈希进行排序。您可以按特定顺序遍历键,但哈希本身不会被排序。
-
谢谢!这就是我最终要寻找的答案。然后回到数组......我认为对数组进行一次排序比在每次需要使用它时对哈希进行排序更快,在我目前的情况下是每秒很多(我想你可以在迭代时创建一个新的哈希键)。
-
同样,您不能对哈希进行排序。您可以将排序后的键列表存储在一个数组中,并使用它来设置您用于遍历散列的顺序,但这仅在您不从散列中添加或删除元素时才有效。
my @sorted = sort keys %hash; for (@sorted) { ... }
标签: arrays perl sorting hash hash-of-hashes