1

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

例如@array = abcd

@array2 有两列包含行条目:

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

如果@array 的任何$member 在任何行中,我想将@array2 的这些行放入@array3 中,理想情况下全部放在一个列中,所以@array3 = axycdxdcxb

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

4

3 回答 3

1

使用for循环:

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

如果要耗尽数组,可以shiftwhile循环中使用:

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

您甚至可以将其缩短为

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

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

于 2012-08-31T13:52:02.217 回答
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's 元素,将split字母放入@i. 'smart match' 操作符(Perl 5.10+)用于查看天气一个或另一个字母是否在包含的列表中@array,如果是,则将列表@i推到@array3中,最终打印出来。

于 2012-08-31T22:08:56.647 回答
0

使用数组,for[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++
}
于 2012-08-31T14:06:40.657 回答