替换 perl 中多维哈希的 MULTIPLE 第一个键

Cha*_*g76 6 perl hash

继我问的类似问题(更改 perl 中多维散列的第一个键)之后,我在 perl 中有一个多维散列,并且想更改所选值的多个第一个键。例如,我有哈希

my %Hash1;
$Hash1{1}{12}=1;
$Hash1{1}{10}=1;
$Hash1{2}{31}=1;
$Hash1{3}{52}=1;
$Hash1{3}{58}=1;
$Hash1{4}{82}=1;
$Hash1{4}{154}=1;
Run Code Online (Sandbox Code Playgroud)

现在我想用值 300 替换第一个键中的值 3 和 4。在此之后我会得到:

$Hash1{1}{12}=1;
$Hash1{1}{10}=1;
$Hash1{2}{31}=1;
$Hash1{300}{52}=1;
$Hash1{300}{58}=1;
$Hash1{300}{82}=1;
$Hash1{300}{154}=1;
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过扫描原始哈希并执行以下操作来创建新哈希:

my %Hash2;
foreach my $key1 (sort keys %Hash1) {
    foreach my $key2 (keys %{ $Hash1{$key1} }) {
        if($key1==3 || $key1==4){
            $Hash2{300}{$key2}=1;
        } else {
            $Hash2{$key1}{$key2}=1;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是有没有更快的方法呢?

Geo*_*dis 7

$Hash1{300} = {%{$Hash1{3}},%{$Hash1{4}}};
delete $Hash1{3};
delete $Hash1{4};
Run Code Online (Sandbox Code Playgroud)

  • `$Hash1{300} = {%{删除 $Hash1{3}},%{删除 $Hash1{4}}};` (2认同)
  • 你是绝对正确的。我相信详细的代码更具可读性。 (2认同)