我有一个不规则的哈希(我不知道如何标记它)
my %hash = (
'BlackBerryOS' => {
'6.0' => 9201,
'7' => 5896,
'10' => 9140,
'4.1' => 5395,
'4.6' => 6536
},
'iOS' => {
'8' => 9327,
'3.0' => 4112,
'5.0' => 8579,
'4.0' => 14953,
'6.0' => 12007,
'7.0' => 13162
},
'AndroidOS' => {
'4.2' => 167501,
'2.3.4' => 7889,
'x' => 473602,
'4.3' => 44551,
'4.1.2' => 90984
}
);
我想根据最深层次的值对此哈希进行排序。 我将如何进行排序和打印以达到类似的效果?
AndroidOS x 473602
AndroidOS 4.2 167501
AndroidOS 4.1.2 90984
AndroidOS 4.3 44551
iOS 4.0 14953
iOS 7.0 13162
iOS 6.0 12007
iOS 8 9327
BlackBerryOS 6.0 9201
BlackBerryOS 10 9140
iOS 5.0 8579
AndroidOS 2.3.4 7889
BlackBerryOS 4.6 6536
BlackBerryOS 7 5896
BlackBerryOS 4.1 5395
iOS 3.0 4112
答案 0 :(得分:2)
哈希是无序的,因此您必须首先将其转换为有序结构(例如数组):
my @data;
for my $os (keys %hash) {
for my $version (keys %{$hash{$os}}) {
push @data, { os => $os, version => $version, n => $hash{$os}->{$version} };
}
}
然后,排序很简单:
@data = sort { $b->{n} <=> $a->{n} } @data;
正如报道:
for (@data) {
print "$_->{os}\t$_->{version}\t$_->{n}\n";
}