Perl哈希仅存储循环最后一个元素的问题排查
Perl哈希赋值问题解析
你的代码之所以只保留数组最后一个元素,核心原因是哈希的键具有唯一性:每次循环中,你都在给%record的同一个键"STORE"赋值,新的值会直接覆盖掉之前存储的值,循环结束后自然只留下最后一次赋值的元素3。
原代码示例:
use strict; use warnings; use Data::Dumper; my @array = (1,2,3); my %record; for my $array(@array) { $record{"STORE"} = $array; } print Dumper \%record;
如果想要让"STORE"键存储数组的所有元素,需要让该键对应的值是一个数组引用(Perl中用引用实现复杂数据结构),有两种常见实现方式:
方式一:直接存储数组引用
如果不需要动态添加元素,直接把整个数组的引用赋值给哈希键即可:
use strict; use warnings; use Data::Dumper; my @array = (1,2,3); my %record; $record{"STORE"} = \@array; print Dumper \%record;
方式二:循环添加元素到数组引用
如果需要在循环中动态构建数组,先初始化"STORE"为空数组引用,再用push向其中添加元素:
use strict; use warnings; use Data::Dumper; my @array = (1,2,3); my %record; $record{"STORE"} = []; # 初始化空数组引用 for my $elem(@array) { push @{$record{"STORE"}}, $elem; } print Dumper \%record;
两种方式最终都会让"STORE"键对应一个包含所有数组元素的数组,用Data::Dumper输出的结果类似:
$VAR1 = { 'STORE' => [ 1, 2, 3 ] };
内容的提问来源于stack exchange,提问作者Sonali
相关产品推荐
相关产品推荐

