2012-11-17 4 views
1

2 개의 배열 (@curNodes@oldNodes)이 있으며 배열 요소는 행에 있습니다. 예컨대 들어 는 : 행에있는 2 개의 배열 요소를 비교하는 방법

Output of print @curNodes Output of print @oldNodes 
US       London 
UK       US 

는 지금은 @oldNodes@curNodes의 각 요소를 비교하려는. 먼저 "US"@oldNodes에 있는지 확인하고 아무 것도하지 않으면 그 밖의 다른 작업을 수행합니다.

요소가 연속적으로 존재하는지 알려 주시기 바랍니다.이 비교 방법은 입니다.

+0

'US London UK US'에는 어떤 배열이 포함되어 있습니까? 질문의 형식을 잘 지정하십시오. –

+0

배열 중 하나에서 중복 된 경우 수행 할 작업은 무엇입니까? – ikegami

+0

설명에서, @ curNodes의 요소가'@ oldNodes'에 있는지 확인하도록 지정합니다. '@ oldNodes'의 요소가'@curNodes'에 있는지 검사할까요? – ikegami

답변

3

Array :: Diff 모듈을 사용할 수 있습니다.

5

외부 모듈을 필요로하지 않는 접근 방식의 경우 첫 번째 배열을 해시로 만든 다음 두 번째 배열을 반복하는 방법은 무엇입니까? 아래를 참조하십시오.

use v5.012; 
use warnings; 

my @old_nodes = qw/ a b c d /; 
my %old = map {; $_ => 1 } @old_nodes; 

my @cur_nodes = qw/ a d /; 

foreach (@cur_nodes) { 
    if ($old{$_}) { 
     say "$_ exists in old_nodes"; 
    } 
} 
+0

curNodes 및 oldnodes는 모두 2 차원 배열입니다. @ curNodes에는 $ curNodes [0] [0] = US, $ curNodes [0] [1] = 영국이 포함되어 있습니다. oldNodes 배열에 $ oldNodes [0] [0] = London, $ oldNodes [0] [1] = US가 포함되어 있습니다. CurNodes의 각 요소를 @oldNodes와 비교하면, $ curNodes [0] [0]은 먼저 $ oldNodes [0] [0], $ oldNodes [0] [1]과 을 비교합니다. 일치하는 것이 있으면 아무 것도 인쇄하지 말고 $ curNodes [0] [1]을 $ oldNodes [0] [0]과 비교하고 $ oldNodes [0] [1]과 비교하십시오. –

+0

확인. 배열 배열이라면 $ oldNodes [1] [27]도 검사해야합니까?그렇지 않다면,'my % old = map {; $ _ => 1} @ {$ oldNodes [0]}'이 (가) 트릭을합니다. – Unk

2

스마트 매치 연산자 (~~)를 사용하여 수행 할 수 있습니다.

#!/usr/bin/perl 
use strict; 
use warnings; 
use 5.010; 
my @curNodes = qw' US UK '; 
my @oldNodes = qw' London US '; 

my $flag; 

foreach my $item (@curNodes) { 
    $flag = @oldNodes~~$item ? 0 : 1; 
    last if !$flag; #perform some action 
} 
0

실제로 우리는 Perl에서 다차원 배열을 갖고 있지 않습니다. 그러나 확실히 배열 참조 배열이 있습니다.

당신이 Perl 5.10 이상을 실행한다고 가정 할 때, 나는 스마트 매치 연산자가 당연하다고 생각한다. 이 방출

#!/usr/bin/perl -Tw 

use 5.010; 
use strict; 
use warnings; 
use Data::Dumper; 

my @curNodes = (
    [ 'US', 'UK' ], 
); 

my @oldNodes = (
    [ 'London', 'US' ], 
); 

my @matchedElements = grep { $_ ~~ @{ $oldNodes[0] } } @{ $curNodes[0] }; 

say Dumper(\@curNodes); 
say Dumper(\@oldNodes); 
say Dumper(\@matchedElements); 

:

당신의 설명을 바탕으로, 여기에 내가 생각 해낸거야

$VAR1 = [ 
      [ 
      'US', 
      'UK' 
      ] 
     ]; 

$VAR1 = [ 
      [ 
      'London', 
      'US' 
      ] 
     ]; 

$VAR1 = [ 
      'US' 
     ]; 

난 당신이 프로그램에서 @matchedElements을 반복 할 거라고 상상한다.

관련 문제