Я не знаю, что вы имеете в виду по убыванию.Можете ли вы показать пример?Я пойду к выводу, который вы показываете.
Я предполагал, что вы не хотите изменять исходные данные (что может быть не так), поэтому я использовал сортировку карты, чтобы создать промежуточную сортировку.Я прохожу этот промежуточный результат по порядку и делаю ненужные биты, чтобы получить то, что вы хотите.Большая часть уродства заключается в том, что вы получили нужный вам формат.
Разблокировка постфикса полезна здесь:
use v5.26;
use utf8;
use strict;
use warnings;
my %Hash = (
1111 => [5,6],
5555 => [3,4],
2222 => [3],
4444 => [3,1]
);
foreach my $tuple (
sort {
$b->[1][0] <=> $a->[1][0]
}
map {
[ $_, [ sort { $b <=> $a } $Hash{$_}->@* ] ];
}
keys %Hash
) {
print my $string = "$tuple->[0] => ";
my $indent = length $string;
foreach my $i ( 0 .. $tuple->[1]->$#* ) {
print ' ' x $indent if $i;
print $tuple->[1][$i];
print ',' if $i == $tuple->[1]->$#*;
print "\n";
}
}
Это дает:
1111 => 6
5,
5555 => 4
3,
4444 => 3
1,
2222 => 3,