我有一个字符串数组@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,因此它们被排除在外! 任何帮助都会很棒!
答案 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}},最后打印出来。