1

文字列の配列 @array があり、@array2 で @array の用語を検索したいと考えています。@array2 には、データ行ごとに 2 つの要素が含まれます。

例 @array = abcd

@array2 には、行エントリを含む 2 つの列があります。

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 に配置し、理想的にはすべてを 1 つの列に配置したいので、@array3 = axycdxdcxb

つまり、行 6 と 7 には a、b、c、または d が含まれていないため、除外されます。どんな助けでも素晴らしいでしょう!

4

3 に答える 3

1

forループを使用します。

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

配列を使い果たしたい場合shiftは、whileループで使用できます。

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

に短縮することもできます

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

ただし、@array のすべてのメンバーが定義されていることが確実な場合に限ります。

于 2012-08-31T13:52:02.217 に答える
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 に答える
0

1 つのオプションを次に示します。

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繰り返し処理し、文字を に変換します。「スマート マッチ」演算子 (Perl 5.10+) は、天気予報のいずれかの文字が に含まれるリストに含まれているかどうかを確認するために使用されます。そうであれば、 のリストが にプッシュされ、最終的に出力されます。@array2split@i@array@i@array3

于 2012-08-31T22:08:56.647 に答える