如何合并由最新覆盖的哈希数组?
Posted
技术标签:
【中文标题】如何合并由最新覆盖的哈希数组?【英文标题】:How to merge an array of hashes overriding by the latest? 【发布时间】:2021-11-28 16:12:18 【问题描述】:根据@choroba,我尝试了以下代码:
use Data::Dumper;
my @arrayofhashes = [
'a' => 4,
'b' => 3
,
'c' => 5,
'a' => 2
];
my %merged;
@merged keys %$_ = values %$_ for @arrayofhashes;
print Dumper \%merged;
这应该是转储:
$VAR1 =
'a' => 2,
'b' => 3,
'c' => 5,
;
但是却失败了:
“不是 HASH 引用”
再次感谢。
【问题讨论】:
@arrayofhashes
仅包含一个元素,即对数组的引用。你有 AoAoH 而不是 AoH。不要使用[]
。
【参考方案1】:
my %merged;
@merged keys %$_ = values %$_ for @array;
有关更深层次的哈希,请参阅Hash::Merge。
更新: 在您的情况下,您的数组仅包含一个元素,即数组引用。所以你需要
@merged keys %$_ = values %$_ for @ $array[0] ;
相反。或者更好的是,删除不必要的级别:
my @arrayofhashes = ( # <-- Round bracket!
'a' => 4,
'b' => 3
,
'c' => 5,
'a' => 2
);
【讨论】:
但它给了我一个“不是 HASH 引用”的错误。 所以数组包含的东西不是哈希引用。 我用我的代码更新了我原来的问题。 见上面@ikegami 的评论。以上是关于如何合并由最新覆盖的哈希数组?的主要内容,如果未能解决你的问题,请参考以下文章