私は次のforeach
ようなループを持っています
foreach my $ref_array (@$array1)
ここ$array
で、はExcelシート全体を読み取った結果です。
ループ内$ref_array
で、シートの各行の値を取得します。$ref_array
次に、スプレッドシートの次の行の値を取得するように進めます。ループの途中でどうすればよいですか?
私は次のforeach
ようなループを持っています
foreach my $ref_array (@$array1)
ここ$array
で、はExcelシート全体を読み取った結果です。
ループ内$ref_array
で、シートの各行の値を取得します。$ref_array
次に、スプレッドシートの次の行の値を取得するように進めます。ループの途中でどうすればよいですか?
0
最後の配列インデックスからループする$#$array1
と、次の行/要素に簡単にアクセスできます。
for my $index ( 0 .. $#$array1 ) {
my ( $current, $next ) = @$array1[ $index, $index + 1 ];
# Process the rows
}
Perl 5.12.0以降の代替:
for ( my ( $idx, $row ) = each @$array1 ) {
last if $idx == $#array1; # Skip last iteration
my $next_row = $array1->[$idx+1];
# ...
}
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
現在の要素だけを使用するだけでは、「単純」でそれを行うことはできません。これはインターレーターではなく、そのリストからの現在の要素への参照です。