perl - 在 Perl 中从 2D 哈希中删除键

标签 perl hash key 2d

我的哈希看起来像这样

%hIDSet = (
      'TSASD2' => {
                    'country' => 'US',
                    'newid' => 'IMRAN',
                    'oldid' => 'TSASD4'
                  }

      'TS767' => {
                   'country' => 'DE',
                   'newid' => 'B90LKT',
                   'oldid' => '432553'
                 },
    );

当我这样做的时候

my $sID = "TSASD2";
delete $hIDSet{$sID};

我得到的输出是

%hIDSet = (
  'TSASD2' => {},
  'TS767' => {
               'country' => 'DE',
               'newid' => 'B90LKT',
               'oldid' => '432553'
             },
);

我的问题是为什么ID没有完全删除?

最佳答案

您确实删除了 key ,因此您必须在再次转储哈希之前重新创建它,如以下代码段所示:

my $sID = "TSASD2";
my %hIDSet = ( $sID => {} );
delete $hIDSet{$sID};
print(Dumper(\%hIDSet));  # It's gone
if ($hIDSet{$sID}{foo}) { '...' }
print(Dumper(\%hIDSet));  # You've recreated it.

请记住

$hIDSet{$sID}{foo}

的缩写
$hIDSet{$sID}->{foo}

还有那个

EXPR->{foo}

表示

( EXPR //= {} )->{foo}

所以

$hIDSet{$sID}{foo}

表示

( $hIDSet{$sID} //= {} )->{foo}

请注意,这可以分配给 $hIDSet{$sID}

关于perl - 在 Perl 中从 2D 哈希中删除键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16224665/

相关文章:

PERL Net::DNS 输出到文件

algorithm - 在perl中找到下一个更高数字的最佳算法

hash - HMAC + SHA256 jwt secret 长度

ruby 字符串到哈希的转换

ruby - Ruby 哈希的 "key"函数有多昂贵?

mysql - MySQL 性能的表主键

JavaScript 关联数组变量

perl - 使用 WWW::Mechanize 凭证

perl - 无法通过包定位对象方法 "strftime"

java - hashcode什么时候计算