Простой способ сортировки на основе значений в хэше в perl



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



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


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



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

557   3  

3 ответов:

Если вы хотите, чтобы компаратор сортировки был чем-то иным, чем 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);
}

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

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

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

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

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

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

Comments

    Ничего не найдено.