инициализировать ключи хеша с массивом - PullRequest
1 голос
/ 30 ноября 2011

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

$biggest_word_size = 0;
foreach $sig (@signals) 
    {
    $sigs->{$sig} = "None";
    $biggest_word_size = 
        ( $biggest_word_size > length($sig) ) ? $biggest_word_size : length($sig) ;
    }

Ответы [ 4 ]

4 голосов
/ 30 ноября 2011
  1. Если честно, то, что вы хотите, это довольно элегантно, как вы хотите. Вы можете сделать это немного более идиоматическим способом, но почему ? Он отлично читается и достаточно лаконичен

  2. Если размер вашего массива не слишком велик и вам не нужно сжимать каждую последнюю унцию производительности, вы можете выполнить эти 2 задачи по отдельности чуть более идиоматическим способом (за счет сканирования массив дважды):

     use List::Util qw(max);
     my $sigs = { map {$_ => 'None'} @signals };
     my $biggest_word_size = max map {length} @signals;
    
2 голосов
/ 30 ноября 2011
use List::Util qw[max];
my $biggest_word_size = 0;
my $sigs = { map { 
    $biggest_word_size = max($biggest_word_size, length $_);
    $_ => 'None' } @signals };
1 голос
/ 30 ноября 2011

Хорошо, если вы игнорируете бит $biggest_word_size, инициализировать хеш-значение из массива можно

my $sigs = { map { $_ => 'None' } @signals };
0 голосов
/ 02 декабря 2011
@signals = sort{ length($a) <=> length($b) } @signals;
my $sigs = { map { $_ => 'None' } @signals };
my $biggest_word_size = length($signals[-1]);

Я бы использовал сортировку для достижения этой цели.

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