【问题标题】:Change first key of multi-dimensional Hash in perl在perl中更改多维哈希的第一个键
【发布时间】:2020-06-26 14:12:07
【问题描述】:

我在 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;
        }
    }
}

但是有更快的方法吗?

【问题讨论】:

  • $Hash1{300} = delete $Hash1{3};
  • 您不需要遍历散列的键来查找键。这就是哈希的意义:)

标签: perl hash


【解决方案1】:
$Hash1{300} = $Hash1{3};
delete $Hash1{3};

【讨论】:

  • 太棒了!非常感谢您的帮助。看起来这是一个相当愚蠢的问题?总有一天我会掌握哈希的窍门!
  • delete 返回值,所以可以$Hash1{300} = delete $Hash1{3};
猜你喜欢
  • 2020-10-20
  • 2017-10-30
  • 2012-09-06
  • 1970-01-01
  • 2015-01-20
  • 2012-02-01
  • 2014-05-27
  • 2011-12-10
  • 2015-01-17
相关资源
最近更新 更多