如何在一个数组中搜索另一个数组中的术语,然后将结果放入第三个数组?

时间:2012-08-31 13:25:07

标签: arrays perl while-loop

我有一个字符串数组@array,我想在@array中搜索@ array2中的术语。 @ array2每行包含两个元素。

e.g。 @array = a b c d

@ array2有两列带有行条目:

row1: a x,     
row2: y c,     
row3: d x,     
row4: d c,     
row5: x b,     
row6: x x,     
row7: y x

如果@array的任何$成员在任何行中,我想将@ array2的这些行放入@ array3中,理想情况下都放在一列中,所以@ array3 = a x y c d x d c x b

即。第6行和第7行不包含a,b,c或d,因此它们被排除在外! 任何帮助都会很棒!

3 个答案:

答案 0 :(得分:1)

使用for循环:

for my $member (@array) {
   ...
}

如果您想耗尽数组,可以在shift循环中使用while

while (@array) {
    my $member = shift @array;
}

你甚至可以将它缩短为

while (defined(my $member = shift @array)) { ... }

但前提是您确定@array的所有成员都已定义。

答案 1 :(得分:0)

使用数组,对于[each]构造可能更合适

@array=<FILE>;  # in array context <FILE> returns an array instead a line

while(@array>0) {  # in scalar context @array returns the size of the array
    my $line = shift @array;
    ...
}

或保留数组

my $i=0;
while($i<@array) {
  my $line = $array[$i];
  ...
} continue {
  $i++
}

答案 2 :(得分:0)

这是一个选项:

use Modern::Perl;

my @array  = qw/ a b c d /;
my @array2 = ( 'a x', 'y c', 'd x', 'd c', 'x b', 'x x', 'y x' );
my @array3;

for (@array2) {
    my @i = split;
    push @array3, @i if $i[0] ~~ @array or $i[1] ~~ @array;
}

say for @array3;

输出:

a
x
y
c
d
x
d
c
x
b

for循环遍历@array2个元素,split将字母转换为@i。 “智能匹配”运算符(Perl 5.10 +)用于查看天气中的一个或另一个字母位于@array中包含的列表中,如果是,则@i中的列表将被推送到{{ 1}},最后打印出来。