我是Perl的初学者。我有两个字符串数组array1和array2。我想检查第二个数组中的每个元素。如果有我想给第二个数组中的特定元素一个相对值。相对值存储在一个数组中。我试一试但它不会工作,git会发出一个警告,比如“在pjt.pl第52行,第3行使用字符串eq中未初始化的值”。
while($i <= (scalar @resultarray-1))
{
while ($j <= (scalar @inputsymbl-1))
{
if ($resultarray[$i] eq $inputsymbl[$j])
{
$rel[$j]=1;
$i=$i+1;
$j=0;
}
else
{
$j=$j+1;
}
}
if($j==(scalar @inputsymbl))
{
$i=$i+1;
$j=0;
}
}
答案 0 :(得分:1)
试试这个:
my $i = 0;
my $j = 0;
## walk each array element
foreach(@resultarray) {
my $result = $_;
foreach(@inputsymbl) {
my $symbl = $_;
if ($result eq $symbl) {
$rel[$j] = 1;
$i++;
} else {
$j++;
}
}
if ($j == (scalar @inputsymbl - 1)) {
$i++;
$j = 0;
}
}
如果您需要详细帮助,请提供更多信息。
答案 1 :(得分:0)
从您的问题和代码中,您似乎希望标记索引,通过使用第三个数组,两个数组相等的元素。但是,通过这样做,您创建的是sparse array。此外,如果两个数组的元素数量不同,则最终会出现“在字符串eq ...中使用未初始化的值”警告。鉴于这些问题,请考虑使用两个数组中较小的索引(使用下面的ternary operator完成)和push
将相等元素的索引放到第三个数组上:
use strict;
use warnings;
use Data::Dumper;
my @results;
my @arr1 = qw/A B C D E F G H I J/;
my @arr2 = qw/A D C H E K L H N J P Q R S T/;
# Equal: ^ ^ ^ ^ ^
# Index: 0 2 4 7 9
for my $i ( 0 .. ( $#arr1 <= $#arr2 ? $#arr1 : $#arr2 ) ) {
push @results, $i if $arr1[$i] eq $arr2[$i];
}
print Dumper \@results;
输出:
$VAR1 = [
0,
2,
4,
7,
9
];
希望这有帮助!