Простой способ сортировки на основе значений в хэше в Perl - PullRequest
2 голосов
/ 12 мая 2011

Обычно сортировка по ключам и последующая итерация хеша могут быть выполнены следующим образом:

for $k (sort (keys %h)) {
  print $k, $h{$k};
}

Но как выполнить сортировку по значениям и затем выполнить итерацию по хешу?Я могу думать о создании нового хэша, меняя пары ключ и значение.Но есть ли более умный способ сделать это?

Большое спасибо.

Ответы [ 3 ]

6 голосов
/ 24 июня 2011

Сортирует хэш % age по значению вместо key

@eldest = sort { $age{$b} <=> $age{$a} } keys %age;

Это делает сортировку по значению. Для более подробной информации обратитесь к Perl Doc:

http://perldoc.perl.org/functions/sort.html

5 голосов
/ 12 мая 2011

Если вы хотите, чтобы компаратор сортировки отличался от cmp, вы можете указать кодовый блок или подпрограмму в качестве первого параметра для sort. Подробнее см. в документации .

my %h = (
    aaaa => 'z',
    bbb  => 'x',
    c    => 'y',
);

# Sort on hash values.
for my $k (sort {$h{$a} cmp $h{$b}} keys %h) {
    print $k, "\n";   # bbb c aaaa
}

# Sort using a named subroutine.
for my $k (sort by_length keys %h) {
    print $k, "\n";   # c bbb aaaa
}

sub by_length {
    length($a) <=> length($b);
}
2 голосов
/ 12 мая 2011

Как отсортировать хэш (необязательно по значению вместо ключа)?

Если вы собираетесь программировать на Perl, вам действительно нужно время, чтобы прочитать FAQ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...