繁体   English   中英

Perl:在哈希数组中获取并行值

[英]Perl: Get parallel value in hash array

我有这个:

my(%arr) = (
 monsters => ["Test","Test2"],
 kills    => [-1,    -2     ]);

然后,我搜索Test2:

 if ( grep { $_ eq "Test2"} @{ $arr{monsters} } )
 {
   #Get parallel value of Test2 (-2)
   next;
 }

如何在不知道索引的情况下获取并行值(搜索时使用实际变量而不是字符串文字)?

而不是使用grep ,而是循环遍历数组并保留一个count变量:

for my $idx( 0 .. $#{ $arr{monsters} } ) { 
    if ( $arr{monsters}[$idx] eq 'Test2' ) { 
        print "Kills = $arr{kills}[$idx]\n";
        last;
    }
}

但是,解决此问题的更好方法可能是重新考虑您的数据结构。 代替并行数组,考虑一个哈希数组:

my @monsters = ( { name => 'Test', kills => -1 }, { name => 'Test2', kills => -2 } );

现在,要查找特定的怪物:

my ( $monst ) = grep { $_->{name} eq 'Test2' } @monsters;
print $monst->{kills};

这样一来,您就可以按名称进行搜索,并且可以轻松地将其杀死。 如果您要始终按名称搜索,那么以名称为关键字的哈希值并指向杀死次数(如@dmah所建议的)可能会更好。

处理此问题的更好方法是将您的怪物包裹在一个类中,并让每个对象跟踪其自身的杀死情况,但我将其保留为OP的练习。

尝试哈希的哈希:

my %arr = (
  'Test' => {
     'kills' => -1,
   },
  'Test2' => {
     'kills' => -2,
   },
);

print $arr{'Test2'}{'kills'}, "\n";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM