在Perl中更改多维哈希表的第一个键

3
我有一个 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;

现在我想用值300替换第一个键中的值3。完成后,结果如下:

$Hash1{1}{12}=1;
$Hash1{1}{10}=1;
$Hash1{2}{31}=1;
$Hash1{300}{52}=1;
$Hash1{300}{58}=1;
$Hash1{4}{82}=1;
$Hash1{4}{154}=1;

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

my %Hash2;
foreach my $key1 (sort keys %Hash1) {
    foreach my $key2 (keys %{ $Hash1{$key1} }) {
        if($key1==3){
            $Hash2{300}{$key2}=1;
        } else {
            $Hash2{$key1}{$key2}=1;
        }
    }
}

但是有更快的方法吗?


6
$Hash1{300} = delete $Hash1{3}; 可以翻译成“删除哈希表中键为3的元素,并将其值分配给键为300的元素”。 - mpapec
1
你不需要遍历哈希表的键来查找一个键。这就是哈希表存在的意义 :) - brian d foy
1个回答

3
$Hash1{300} = $Hash1{3};
delete $Hash1{3};

太好了!非常感谢你的帮助。看起来这是一个相当愚蠢的问题?总有一天我会掌握哈希的技巧的! - Chazg76
1
delete returns the value, so you can $Hash1{300} = delete $Hash1{3}; - brian d foy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接