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

Arrays 如何在一个数组中搜索另一个数组中的词,然后将结果放入第三个数组?,arrays,perl,while-loop,Arrays,Perl,While Loop,我有一个字符串数组@array,我想在@array2中搜索@array中的术语@array2每行数据包含两个元素 e、 g.@阵列=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的任何$member在任何一行中,我想把@array2的那些行放到@array3中

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

e、 g.@阵列=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的任何$member在任何一行中,我想把@array2的那些行放到@array3中,理想情况下,所有的行都放在一列中,所以@array3=a x y c d x d c x b

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

对循环使用

for my $member (@array) {
   ...
}
while (@array) {
    my $member = shift @array;
}
如果要耗尽阵列,可以在
while
循环中使用
shift

for my $member (@array) {
   ...
}
while (@array) {
    my $member = shift @array;
}
你甚至可以把它缩短到

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

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

使用
for
循环:

for my $member (@array) {
   ...
}
while (@array) {
    my $member = shift @array;
}
如果要耗尽阵列,可以在
while
循环中使用
shift

for my $member (@array) {
   ...
}
while (@array) {
    my $member = shift @array;
}
你甚至可以把它缩短到

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

但只有在您确定@array的所有成员都已定义的情况下,才可以使用数组,因为[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;
    ...
}
@array=;#在数组上下文中,返回一个数组,而不是一行
而(@array>0){#在标量上下文中@array返回数组的大小
my$line=shift@array;
...
}
或者保留数组

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

虽然($i使用数组,但对于[每个]构造可能更合适

@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;
    ...
}
数组上下文中的
@array=;#返回一个数组而不是一行
而(@array>0){#在标量上下文中@array返回数组的大小
my$line=shift@array;
...
}
或者保留数组

my $i=0;
while($i<@array) {
  my $line = $array[$i];
  ...
} continue {
  $i++
}
my$i=0;
而($i这里有一个选项:

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
的元素,
将字母拆分为
@i
。“智能匹配”操作符(Perl 5.10+)用于查看一个或另一个字母是否在
@array
中包含的列表中,如果是,则将
@i
中的列表推送到
@array3
,最后打印出来。

这里有一个选项:

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
的元素,
将字母拆分为
@i
。“智能匹配”操作符(Perl 5.10+)用于查看
@array
中包含的列表中是否有一个或另一个字母,如果有,则
@i
中的列表将被推送到
@array3
,最后打印出来。

您是否覆盖或追加了放入字符串的文件?此外,您的问题变得越来越复杂,请显示一些示例输入和结果是什么。当然这取决于第二个文件的大小,但我至少会尝试将整个文件读入数组。查找这两个数组的相交元素要简单得多——代码也更易于维护。)我已经更新了问题描述-希望现在读起来更简单!如果你想问一个不同的问题,请启动一个新的线程,而不是完全更改一个旧的问题。你是否覆盖或追加了你放入字符串的文件?此外,你的问题变得复杂,请显示一些示例输入和结果是什么。当然这取决于第二个文件的大小,但我至少会尝试将整个文件读入数组。查找这两个数组的相交元素要简单得多——代码也更易于维护。)我已经更新了问题描述——希望现在读起来更直观!如果你想问一个不同的问题,请启动一个新的线程,而不是完全改变一个旧的问题。使用你的最后一个建议,在我的第一个while循环中将@array分配给我使用的哈希:
%members;while(defined(my$member=shift@array)){if($member=~m/(\w+/){$members{$1}=1;}}
但这似乎只有一个输出??我的下一个while循环是按原样搜索@array2,或者按本例中的文件搜索:
打开(FILE2,$filename2);而(my$member2=){if($member2=~m/(\w+)/){if(exists($members{$1})){$member2=;print$member;}}}}}close FILE2
当你说使用for循环时,你的意思是代替while循环吗?使用你最后的建议,在我的第一个while循环中,将@array分配给我使用的哈希:
%members;while(defined(my$member=shift@array)){if($member=~m/(\w+/){$members{$1}=1;}}
但这似乎只有一个输出??我的下一个while循环是按原样搜索@array2,或者按本例中的文件搜索:
打开(FILE2,$filename2);而(my$member2=){if($member2=~m/(\w+)/){if(exists($members{$1})){$member2=;print$member;}}}}}close FILE2当你说使用for循环时,你的意思是代替while循环吗?