首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Perl,检查散列的哈希中是否存在对

Perl,检查散列的哈希中是否存在对
EN

Stack Overflow用户
提问于 2010-12-02 23:23:56
回答 5查看 8.9K关注 0票数 1

在Perl中,我有一个用类似于下面的循环创建的散列散列

代码语言:javascript
运行
复制
    my %HoH
    for my $i (1..10) {
      $HoH{$a}{$b} = $i; 
    }

$a和$b是在填充HoH时确实有一些值的变量。创建HoH后,如何检查HoH中是否存在特定的对($c、$d)?以下代码不起作用

代码语言:javascript
运行
复制
if (defined $HoH{$c}{$d}) {...}

因为如果HoH中不存在$c,它将被创建为不带值的键。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-12-02 23:33:48

代码语言:javascript
运行
复制
use Data::Dumper;

my %HoH;

$HoH{A}{B} = 1;

if(exists $HoH{C} && exists $HoH{C}{D}) {
   print "exists\n";
}

print Dumper(\%HoH);

if(exists $HoH{C}{D}) {
   print "exists\n";
}

print Dumper(\%HoH);

输出:

代码语言:javascript
运行
复制
$VAR1 = {
          'A' => {
                   'B' => 1
                 }
        };
$VAR1 = {
          'A' => {
                   'B' => 1
                 },
          'C' => {}
        };

自动生成是创建密钥的原因。我的第二个示例中的"exists“显示了这一点,因此第一个示例分别检查这两个键。

票数 3
EN

Stack Overflow用户

发布于 2010-12-03 00:51:03

写作

代码语言:javascript
运行
复制
if (defined $HoH{$c}{$d}) {...}

将会“工作”,因为它会告诉你$HoH{$c}{$d}是否有一个定义的值。问题是,如果$HoH{$c}不存在,它将被创建(使用适当的值),以便可以测试$HoH{$c}{$d}。这个过程被称为“自生动”。在设置值时很方便,例如

代码语言:javascript
运行
复制
my %hoh;
$hoh{a}{b} = 1; # Don't need to set '$hoh{a} = {}' first

但在检索可能不存在的值时不方便。我希望Perl足够聪明,只对用作左值的表达式执行自动形象化,并短路返回r值的undef,但是,天哪,它并没有那么神奇。autovivification杂注(在CPAN上可用)添加了执行此操作的功能。

为了避免自动生动,你需要先测试中间值:

代码语言:javascript
运行
复制
if (exists $HoH{$c} && defined $HoH{$c}{$d}) {
     ...
}
票数 4
EN

Stack Overflow用户

发布于 2010-12-03 01:59:10

以下几种方式:

代码语言:javascript
运行
复制
if ( $HoH{$c} && defined $HoH{$c}{$d} ) {...}

代码语言:javascript
运行
复制
if ( defined ${ $HoH{$c} || {} }{$d} ) {...}

代码语言:javascript
运行
复制
no autovivification;
if (defined $HoH{$c}{$d}) {...}

代码语言:javascript
运行
复制
use Data::Diver;
if ( defined Data::Diver::Dive( \%HoH, $c, $d ) ) {...}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4336569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档