使用数组初始化哈希的键

时间:2011-11-30 11:18:04

标签: perl

我需要初始化散列哈希值。我这样做的方法如下,有更优雅的方式吗?

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

4 个答案:

答案 0 :(得分:4)

  1. 老实说,对于你想要的东西,这就像你想要的一样优雅。您可以稍微习惯一点,但为什么?它完全可读且简洁

  2. 如果您的阵列尺寸不是太大,并且您不关心挤压每一盎司的性能,您可以稍微更惯用的方式分别执行这两项任务(以扫描为代价)数组两次):

     use List::Util qw(max);
     my $sigs = { map {$_ => 'None'} @signals };
     my $biggest_word_size = max map {length} @signals;
    

答案 1 :(得分:2)

use List::Util qw[max];
my $biggest_word_size = 0;
my $sigs = { map { 
    $biggest_word_size = max($biggest_word_size, length $_);
    $_ => 'None' } @signals };

答案 2 :(得分:1)

好吧,如果忽略$biggest_word_size位,从数组初始化hashref可以是

my $sigs = { map { $_ => 'None' } @signals };

答案 3 :(得分:0)

@signals = sort{ length($a) <=> length($b) } @signals;
my $sigs = { map { $_ => 'None' } @signals };
my $biggest_word_size = length($signals[-1]);

我会用一种方法来达到这个目的。