在两个数组字符串中搜索相等的单词

时间:2014-02-06 07:14:14

标签: arrays perl

我是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;
    }
}

2 个答案:

答案 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
        ];

希望这有帮助!