这是我的场景,其中有2个哈希已经从2个JSON文件解码。Perl - 比较两个嵌套哈希
我有2个复杂的哈希,
$hash1 = {k1=> { k11 => v1, k12 => v2}, k2 => { k21 => [v1, v2, v3] }}
$hash2 = {k1=> { k11 => v1, k12 => v2}, k2 => { k21 => [v3, v2, v1] }}
我想比较这两个哈希平等,并用比较数据::测试的比较和is_deeply ::更多。两者都不会忽略数组的顺序。
我想比较忽略键'k21'的数组值的顺序。
我的应用程序从'keys%hash'填充数组,给出随机顺序。
尝试了Data :: Compare的'ignore_hash_keys',但我的散列有时可能很复杂,不想忽略。
密钥'k21'有时也可以有散列数组。
$hash3 = {k1=> { k11 => v1}, k2 => { k21 => [{v3 => v31}, {v2 => v22}] }}
如何通过忽略数组顺序来比较这种复杂的散列。
感谢simbabque的回答, 如何动态地在散列内部收集所有数组引用。 生成$ hash2并包含嵌套散列,我该如何动态地对cmp_deeply说任何数组比较应该通过bag来完成,还是应该遍历散列并进行单独的包比较。 – Girish
Thanks @simbabque,如何动态地在散列内部收集所有数组引用。 'my $ arr_of_h1 = {'a'=> [1,2,3],b => [{2 => 1},{1 => 1},{3 => 1}]};' ' my $ arr_of_h2 = {'a'=> [1,2,3],b => [{2 => 1},{3 => 1},{1 => 1}]};' 'cmp_deeply $ arr_of_h1 - > {b},bag(@ {$ arr_of_h2 - > {b}}),“Array are equal”);' 上面的stmt工作,但想通过执行bag比较工作在下面。 'cmp_deeply($ arr_of_h1,$ arr_of_h2,“哈希值相等”);' – Girish
@user我认为您将不得不构建它。或者也许有一些挂钩机制。您是否阅读完整的Test :: Deep文档?否则,你可以使用https://metacpan.org/pod/Data::Visitor或类似的东西来构建遍历。我建议你问一个新的问题,因为它与这里最初的问题不同。 – simbabque