如何合并由最新覆盖的哈希数组?

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 的评论。

以上是关于如何合并由最新覆盖的哈希数组?的主要内容,如果未能解决你的问题,请参考以下文章

合并两个数组,并且把相同的数值覆盖掉

合并两个数组而不覆盖[重复]

请教各位老师php二维数组 查找相同的值合并 如何写

RSpec 请求测试在 POST JSON 参数中合并数组中的哈希

数组合并 不覆盖

如何合并 Ruby 哈希