2014-02-06 58 views
0

我是一名Perl初學者。我有兩個字符串數組array1和array2。我想檢查第二個數組中的每個元素。如果有我想給第二個數組中的特定元素的相對值1。相對值被存儲在一個數組中。我嘗試了它,但它不會工作,並且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

從你提供的信息來看,我相信你的問題是你使用某種未初始化的值。不要這樣做。不過,真的,你如何期待任何人來幫助你解決這個問題? – DeVadder

回答

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

提供更多信息,如果您需要詳細的幫助。

0

從你的問題和代碼看來,你想要標誌索引,通過使用第三個數組,這兩個數組的元素是相等的。但是,通過這樣做,您可以創建sparse array。另外,如果兩個數組的元素數量不相同,則最終會出現「在字符串eq ...中使用未初始化的值」警告。鑑於這些問題,可以考慮使用兩個陣列中較小的索引和push荷蘭國際集團的相等的元素的索引到第三陣列(使用下面的ternary operator完成):

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

希望這可以幫助!