У меня есть следующая структураСортировка хэша хэшей по значению
my %HoH = {
'foo1' => {
'bam' => 1,
'zip' => 0,
},
'foo2' => {
'bam' => 0,
'zip' => 1,
'boo' => 1
}
};
данные, которые я хотел бы отсортировать ключом1 (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, где они действуют как хеши, но также имеют порядок сортировки. –