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

两个想法:

首先,如果您总是需要一对连续的行,那么您可以记住前一行,例如

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 回答