【发布时间】:2013-04-22 02:43:45
【问题描述】:
我有以下数据结构
my %HoH = {
'foo1' => {
'bam' => 1,
'zip' => 0,
},
'foo2' => {
'bam' => 0,
'zip' => 1,
'boo' => 1
}
};
我想按照 'zip' 中存储的 VALUE 从大到小对 KEY1(foo1 或 foo2)进行排序。
这就是我的做法。
use strict; use warnings;
use Data::Dumper;
my @sorted;
foreach my $KEY1 (keys %HoH) {
# sort KEY1 by the value 'zip' maps to in descending order
@sorted = sort {$HoH{$KEY1}{'zip'}{$b} <=>
$HoH{$KEY1}{'zip'}{$a}} keys %HoH;
}
print Dumper(\@sorted);
我收到了一个奇怪的警告:在 test.pl 第 6 行中找到了预期大小相同的列表的参考。
print Dumper(\@sorted); 也在打印中
$VAR1 = [
'HASH(0x1b542a8)'
];
什么时候打印
$VAR1 = [
['foo2', 'foo1']
];
因为foo2 有1 个zip 而foo1 有0 个zip。
【问题讨论】:
-
术语的关键点:您不能对哈希进行排序。哈希没有顺序。您可以做的是以给定顺序打印散列中的内容,但散列本身未排序。这与 PHP 数组不同,它们的作用类似于哈希,但也有排序顺序。
标签: arrays perl hash-of-hashes