불규칙한 해시가 있습니다 (다른 레이블을 지정하는 방법을 모르겠습니다)
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
해시는 순서가 지정되지 않았으므로 먼저 순서가 지정된 구조 (예 : 배열)로 변환해야합니다.
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";
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다