Zen*_*eno 1 arrays parallel-processing perl
我有这个:
my(%arr) = (
monsters => ["Test","Test2"],
kills => [-1, -2 ]);
Run Code Online (Sandbox Code Playgroud)
然后我搜索Test2:
if ( grep { $_ eq "Test2"} @{ $arr{monsters} } )
{
#Get parallel value of Test2 (-2)
next;
}
Run Code Online (Sandbox Code Playgroud)
如何在不知道索引的情况下获取并行值(在搜索时使用实际变量而不是字符串文字)?
而不是使用grep,只是循环数组并保持计数变量:
for my $idx( 0 .. $#{ $arr{monsters} } ) {
if ( $arr{monsters}[$idx] eq 'Test2' ) {
print "Kills = $arr{kills}[$idx]\n";
last;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,处理此问题的更好方法可能是重新考虑您的数据结构.而不是并行数组,考虑一个哈希数组:
my @monsters = ( { name => 'Test', kills => -1 }, { name => 'Test2', kills => -2 } );
Run Code Online (Sandbox Code Playgroud)
现在,找一个特定的怪物:
my ( $monst ) = grep { $_->{name} eq 'Test2' } @monsters;
print $monst->{kills};
Run Code Online (Sandbox Code Playgroud)
这将允许您按名称搜索并同样轻松地杀死.如果您要始终按名称搜索,那么在名称上键入哈希并指向杀戮的数量(如@dmah建议的那样)可能会更好.
处理这个问题的一个更好的方法是将你的怪物包裹在一个类中,让每个对象跟踪它自己的杀戮,但我会把它作为OP的练习.
| 归档时间: |
|
| 查看次数: |
317 次 |
| 最近记录: |