Как получить ключ на основе значения с использованием хэшей в Perl? - PullRequest
0 голосов
/ 10 января 2012

как получить ключ на основе VALUE в Perl с использованием хэшей? если у меня есть:

"dime"=>"4"
"nickle"=>"5"
"quarter"=>"2"
"dollar"=>"6"

теперь я сортирую их, и самый высокий - 6. Я хочу быть в состоянии схватить "доллар". Вот что я попробовал:

# sort money based on count
my @sorted = sort {$deposit->{$b} cmp $deposit->{$a}} keys %$deposit;
  my %rhash;
  @rhash{values %deposit} = keys %deposit;

  $owner = $rhash->{$sorted[0]}; #get highest count

Ответы [ 2 ]

3 голосов
/ 10 января 2012

Если ваши значения уникальны, вы можете повернуть карту таким образом:

my %rev = map { $deposit->{$_} => $_ } keys %$deposit;

[при условии, что $deposit является ссылкой на перечисленный хэш]

2 голосов
/ 10 января 2012

Сортировка - это O (n log n), что требует больше работы, чем необходимо. Нахождение наивысшего можно сделать с помощью алгоритма O (n). Вот пример, использующий алгоритм «отметки максимальной воды»:

#!/usr/bin/perl
use warnings;
use strict;

my %deposit = (
    "dime"=>"4",
    "nickle"=>"5",
    "quarter"=>"2",
    "dollar"=>"6",
);

my $hi_key;
foreach (keys %deposit) {
    $hi_key = $_ if $deposit{$_} > $deposit{$hi_key};
}

print "high is: $hi_key => $deposit{$hi_key}\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...