我有哈希哈希哈希为
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关键字)。 感谢。
答案 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" },
},
}