Joh*_*ohn 19 perl hash replace
让我们说如果我有这样的哈希:
$data = {
'key1' => {
'key2' => 'value1'
},
'key3' => {
'key4' => {
'key5' => 'value2'
}
},
};
Run Code Online (Sandbox Code Playgroud)
现在,如何将键'key5'替换为其他键名称'key6'?我知道如何遍历哈希并转储值,但我不知道如何替换键或值.谢谢你的帮助.
mob*_*mob 46
该delete
运算符返回被删除的价值.所以这
$data->{key3}{key4}{key6} = delete $data->{key3}{key4}{key5}
Run Code Online (Sandbox Code Playgroud)
会做你想要的.
你不能替换它,但你可以轻松地创建一个新密钥,然后delete()
是旧密钥:
$data->{key3}{key4}{key6} = $data->{key3}{key4}{key5};
delete $data->{key3}{key4}{key5};
Run Code Online (Sandbox Code Playgroud)
当然,你可以做一个相当简单的子程序来做到这一点.但是,我的第一种方法是错误的,你需要制作一个更复杂的方法来传递数据结构来修改和修改元素,并且假设你想要多个级别的元素,这可能很难.虽然如果你不介意一点点混乱:
sub hash_replace (\%$$) {
$_[0]->{$_[2]} = delete $_[0]->{$_[1]}; # thanks mobrule!
}
Run Code Online (Sandbox Code Playgroud)
然后叫它:
hash_replace %{$data->{key3}{key4}}, "key5", "key6";
Run Code Online (Sandbox Code Playgroud)
或者很酷的方式(如何更好地说我们将"key5"转换为"key6"?):
hash_replace %{$data->{key3}{key4}}, key5 => "key6";
Run Code Online (Sandbox Code Playgroud)
(经过测试和工作)