我需要初始化散列哈希值。我这样做的方法如下,有更优雅的方式吗?
$biggest_word_size = 0;
foreach $sig (@signals)
{
$sigs->{$sig} = "None";
$biggest_word_size =
( $biggest_word_size > length($sig) ) ? $biggest_word_size : length($sig) ;
}
答案 0 :(得分:4)
老实说,对于你想要的东西,这就像你想要的一样优雅。您可以稍微习惯一点,但为什么?它完全可读且简洁
如果您的阵列尺寸不是太大,并且您不关心挤压每一盎司的性能,您可以稍微更惯用的方式分别执行这两项任务(以扫描为代价)数组两次):
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]);
我会用一种方法来达到这个目的。