2

私は次のforeachようなループを持っています

foreach my $ref_array (@$array1)

ここ$arrayで、はExcelシート全体を読み取った結果です。

ループ内$ref_arrayで、シートの各行の値を取得します。$ref_array次に、スプ​​レッドシートの次の行の値を取得するように進めます。ループの途中でどうすればよいですか?

4

3 に答える 3

7

0最後の配列インデックスからループする$#$array1と、次の行/要素に簡単にアクセスできます。

for my $index ( 0 .. $#$array1 ) {
    my ( $current, $next ) = @$array1[ $index, $index + 1 ];
    # Process the rows
}
于 2012-11-27T13:29:10.763 に答える
6

Perl 5.12.0以降の代替:

for ( my ( $idx, $row ) = each @$array1 ) {

    last if $idx == $#array1;         # Skip last iteration

    my $next_row = $array1->[$idx+1];
    # ...
}
于 2012-11-27T13:32:24.537 に答える
5

2つのアイデア:

まず、連続する行のペアが常に必要な場合は、前の行を覚えておくことができます。

my $prev_row;
foreach my $row (@rows) {
  # Skip first row; we don't have a previous one yet
  if (!$prev_row) {
    $prev_row = $row;
    next;
  }

  # Do stuff with $prev_row and $row

  $prev_row = $row;
}

次に、通常のCスタイルのforループを使用します。その場合、インデックスがあり、実際にはいつでも必要な要素にアクセスできます。

# don't iterate over the last line so not to access beyond the array
for (my $idx = 0; $idx < (scalar(@rows) - 1); $idx++) {
  my $row      = $rows[$idx];
  my $next_row = $rows[$idx + 1];
}

foreach現在の要素だけを使用するだけでは、「単純」でそれを行うことはできません。これはインターレーターではなく、そのリストからの現在の要素への参照です。

于 2012-11-27T13:03:11.553 に答える