Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl排序不规则嵌套哈希_Perl_Sorting_Hash - Fatal编程技术网

Perl排序不规则嵌套哈希

Perl排序不规则嵌套哈希,perl,sorting,hash,Perl,Sorting,Hash,我有一个不规则的散列(我不知道如何标记它) 我想根据最深级别的值对该哈希进行排序。 我如何进行排序和打印,最终得到这样的结果 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 12

我有一个不规则的散列(我不知道如何标记它)

我想根据最深级别的值对该哈希进行排序。 我如何进行排序和打印,最终得到这样的结果

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

散列是无序的,因此必须首先将其转换为有序结构(如数组):

那么,排序就很简单了:

@data = sort { $b->{n} <=> $a->{n} } @data;

你的价值观独特吗?如果答案是肯定的,我建议把你的散列倒过来。
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";
}