Как справиться с этой ситуацией, когда выбираете одного владельца из списка владельцев, используя perl-хэши? - PullRequest
1 голос
/ 09 января 2012

Я запускаю команду Perforce для списка файлов, и после некоторого разбора и прочее я создаю файл, который содержит владельцев, например:.log файл и выберите владельца как это:

while(<OWNER>) {
 $vote->{$_} += 1;
}

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

ownerA
ownerB
ownerC
ownerD

каждый получает одинаковый голос?Как мне выбрать один?

Спасибо.

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

Ответы [ 2 ]

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

Один из способов определить, имеют ли все хеш-ключи одинаковое значение, - использовать uniq .Если есть только одно общее значение, используйте ключи вашего хэша в качестве массива и используйте rand, чтобы найти случайный индекс в пределах массива:

use More::ListUtils qw(uniq);
my @keys = keys   %hash;
my @vals = values %hash;
if (scalar uniq(@vals) == 1) {
    print "all of equal weight\n";
    print $keys[ int(rand(@keys)) ], "\n";
}
0 голосов
/ 10 января 2012

Предполагая массив @winners:

print "The winner is: ", $winners[rand @winners];

Весь процесс:

my $last = 0; 
my @winners;
for my $name (sort { $vote->{$b} <=> $vote->{$a} } keys %$vote) { 
    last if ($vote->{$name} < $last); 
    push @winners, $name; 
    $last = $vote->{$name};
} 

my $winner = $winners[rand @winners];

print "The winner is, by ", 
       @winners == 1 ? "unanimous vote: " : "luck of the draw: ", $winner;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...