在Perl中一步声明并填充哈希表

时间:2012-08-17 14:52:45

标签: perl hash initialization lookup-tables hashref

目前,当我想构建一个查找表时,我使用:

my $has_field = {};
map { $has_field->{$_} = 1 } @fields;

有没有办法可以在一个步骤中进行内联初始化? (即在我宣布它的同时填充它?)

3 个答案:

答案 0 :(得分:14)

只需使用您的地图创建一个列表,然后放入哈希引用,如:

my $has_field = { map { $_ => 1 } @fields };

答案 1 :(得分:3)

更新:对不起,这并不能完全满足您的需求,因为您仍然需要先声明$ has_field。

您可以使用哈希切片:

@{$has_field}{@fields} = (1)x@fields;

右侧使用x运算符以@fields的标量值(即数组中元素的数量)重复一个运算符。另一种选择:

@{$has_field}{@fields} = map {1} @fields;

答案 2 :(得分:2)

在我测试的地方smart match的速度可以是创建查找哈希并测试值一次的2到5倍。因此,除非您要多次重复使用哈希,否则最好进行智能匹配:

if ( $cand_field ~~ \@fields ) { 
   do_with_field( $cand_field );
}

要记住,从5.10开始,Perl现在有一种 native 的方式来询问“这些未知值是否为这些已知值”,它是智能匹配