我有2个数组(@curNodes
和@oldNodes
),数组的元素在行中。
例如:
Output of print @curNodes Output of print @oldNodes
US London
UK US
现在我想将@curNodes
的每个元素与@oldNodes
进行比较。
例如,它会检查"US"
中的@oldNodes
,如果它什么都不做的话
其他一些其他行动。
请你帮我,让我知道元素是否排成一行, 如何进行这种比较。
答案 0 :(得分: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";
}
}
答案 1 :(得分:3)
您可以使用 Array :: Diff 模块。
答案 2 :(得分: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
}
答案 3 :(得分: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。