List 如何在perl中通过添加列表中的键来更新哈希

List 如何在perl中通过添加列表中的键来更新哈希,list,perl,hash,List,Perl,Hash,声明散列时添加一组键非常简单,如下所示- my %hash = map { $_ => 1 } @list; 如果我想从另一个列表中添加更多的键,如何使用单行来实现这一点?声明%hash后,您可以使用@hash{list},使用列表中的现有键或新键 @hash{ @more_keys } = @values_for_new_keys; 看 如果要将新键初始化为固定值,可以执行以下操作:例如 @hash { @more_keys } = (1) x @more_keys; 其中,(1

声明散列时添加一组键非常简单,如下所示-

my %hash = map { $_ => 1 } @list;

如果我想从另一个列表中添加更多的键,如何使用单行来实现这一点?

声明
%hash
后,您可以使用
@hash{list}
,使用
列表中的现有键或新键

@hash{ @more_keys } = @values_for_new_keys;


如果要将新键初始化为固定值,可以执行以下操作:例如

@hash { @more_keys } = (1) x @more_keys;

其中,
(1)xn
返回长度为
N
1
s列表,标量上下文中的
@more\u key
返回其长度。

您也可以这样做:
my%h=map{$\u=>1}@list,99107,@list2,@list3。本质上,
map
需要一个列表,它所做的是将所有项压缩到一个更大的列表中。我想将新键初始化为一个固定值。我做了以下操作,效果很好-
@hash{@more_keys}=1
@vp8
@more_keys
是否有多个元素?这将为列表指定一个值,因此它只应指定给列表的第一个元素,并截断其余元素。@zdim未被截断,只将undef指定为所有添加键的值,但first@ysth是的,谢谢——我的意思是,对于现有的列表,当指定一个值时,它只得到一个具有该值的元素。但是在这里,所有的键都被添加了,所以其他的键保持不变(并且
undef
)。谢谢你的帮助correction@zdim你是对的!我最终为其他键设置了
undef
。谢谢@zdim和@ysth!