如何重构散列哈希的散列?

时间:2017-05-15 06:20:13

标签: perl hash

我有哈希哈希哈希为

hash_1 =>{
           hash_2=>{
               a1 => {           
                      1 => m,
                      2 => x,
                      3 => n
                     },
               a2 =>  {
                      1 => a,
                      2 => x,
                      3 => b
                      },
                a3 =>  {
                      1 => c,
                      2 => y,
                      3 => d
                      },
                a4 =>  {
                      1 => i,
                      2 => y,
                      3 => j
                      },
             },
         };

现在我要删除密钥" hash_2"并添加新密钥代替" hash_2"这取决于键的价值" 2"在每个哈希值a1,a2,a3 ......里面......就像这里我们有两个不同的键值#34; 2" :x和y。所以我希望这些值代替第一个哈希" hash_2"的关键字。并完全创建一个新的哈希映射。 所以最终结果应该是:

  hash_1 =>{
           x=>{
               a1 => {           
                      1 => m,
                      2 => x,
                      3 => n
                     },
               a2 =>  {
                      1 => a,
                      2 => x,
                      3 => b
                      },
              },
            y => {
                a3 =>  {
                      1 => c,
                      2 => y,
                      3 => d
                      },
                a4 =>  {
                      1 => i,
                      2 => y,
                      3 => j
                      },
             },
         };

我检查了How to replace a Perl hash key?,但无法获得如何将密钥值作为密钥。 我尝试删除hash_2但没有成功(使用delete关键字)。 感谢。

1 个答案:

答案 0 :(得分:1)

像这样,也许?

use strict;
use warnings 'all';

use Data::Dump;

my $hash_1 = {
  hash_2 => {
    a1 => { 1 => "m", 2 => "x", 3 => "n" },
    a2 => { 1 => "a", 2 => "x", 3 => "b" },
    a3 => { 1 => "c", 2 => "y", 3 => "d" },
    a4 => { 1 => "i", 2 => "y", 3 => "j" },
  }
};

{
    my $data = delete $hash_1->{hash_2};

    for my $key ( keys %$data ) {
        my $item = $data->{$key};
        $hash_1->{ $item->{2} }{ $key } = $item;
    }
}

dd $hash_1;

输出

{
  x => {
         a1 => { 1 => "m", 2 => "x", 3 => "n" },
         a2 => { 1 => "a", 2 => "x", 3 => "b" },
       },
  y => {
         a3 => { 1 => "c", 2 => "y", 3 => "d" },
         a4 => { 1 => "i", 2 => "y", 3 => "j" },
       },
}