目前,当我想构建一个查找表时,我使用:
my $has_field = {};
map { $has_field->{$_} = 1 } @fields;
有没有办法可以在一个步骤中进行内联初始化? (即在我宣布它的同时填充它?)
答案 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 的方式来询问“这些未知值是否为这些已知值”,它是智能匹配