1

我有 2 个数组(@curNodes@oldNodes),数组的元素在行中。例如:

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

现在我想比较@curNodeswith的每个元素@oldNodes。例如,首先它会检查"US"in @oldNodes,如果它没有做任何其他操作。

您能否帮助我,让我知道元素是否在行中,如何进行这种比较。

4

4 回答 4

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";
    }
}
于 2012-11-17T07:28:20.280 回答
3

您可以为此使用Array::Diff模块。

于 2012-11-17T07:19:45.463 回答
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
}
于 2012-11-17T07:34:28.393 回答
0

Perl 中并没有真正的多维数组。但是肯定有数组引用数组。

假设您正在运行 Perl 5.10 或更高版本,我认为 smartmatch 运算符是有道理的。

根据您的描述,这是我想出的:

#!/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 。

于 2012-11-18T03:03:06.507 回答