我正在尝试将键/值对列表“推送”到perl哈希中,如下所示。我认为它可以像将数组分配给散列时分配键值对一样工作。 @targets
包含每个元素的制表符分隔字符串。然而,对于map循环的每次迭代,散列都被覆盖,最后我在散列中只有一个键值对,它对应于@targets
的最后一个元素。我试图避免通常的$ID_Gene{$key}=$value
类型分配。
如何将列表作为键值对推送到哈希?
或者,有什么方法可以构建一个匿名哈希,然后将该哈希值推送到原始哈希值?如:%ID_Gene = (%ID_Gene, %AnonyHash);
my %ID_Gene;
map{ %ID_Gene= (split /\t/,$_) ;
}@targets;
答案 0 :(得分:4)
你几乎就在那里,你只是把作业放在了错误的地方,所以你每次添加一个项目时最终都会吹走整个哈希。作为一般规则,在map
中做副作用的事情通常没有意义。你可以这样做:
my %ID_Gene = map { split /\t/, $_ } @targets;
如果您已经在%ID_Gene
中有一些内容并且想添加它,则可以
%ID_Gene = (%ID_Gene, map { split /\t/, $_ } @targets);
或者如果你认为在一行中发生太多事情:
my %to_add = map { split /\t/, $_ } @targets;
%ID_Gene = (%ID_Gene, %to_add);