2

我不知道这个问题是否清楚,无论如何,我正在使用从我的谷歌驱动器电子表格中读取一些数据Net::Google::Spreadsheet,并且我按如下方式获取数组中的所有行my @rows = $worksheet->rows,但是,我想......让我们说除@rows在其他数组之间,例如@rows有 200 个元素,我想给前 50 个给@array1和接下来的 50 个给@array2等等,而不使用计数器(counter++; if (counter > 50) ...)。或者假设我只想获取 70 到 110 之间的元素。

4

2 回答 2

6

你可以使用这样的东西:

my @array1 = @rows[0 .. 49];
my @array2 = @rows[50 .. 99];

这称为数据切片。有关更多详细信息,请参阅此文档

于 2013-10-03T14:01:30.070 回答
5

普通数组切片答案很棒。我只想增加另一个(类/样式)解决方案的可见性,特别是Data::Page

之前有人说过,这段代码对于 CPAN 来说“太简单了”,但我必须不同意。

这看起来有点矫枉过正,但它使东西变得干净、可预测和可重复。当代码开始超过一次性阶段时,它可以提供很多帮助。

use strictures;
use Data::Page;

my @stuff = ( "a" .. "z" );

my $pager = Data::Page->new;
$pager->total_entries(scalar@stuff);
$pager->entries_per_page(6); # Arbitrary for demo, pick your own page size.

for my $p ( $pager->first_page .. $pager->last_page )
{
    $pager->current_page($p);
    for my $entry ( $pager->splice(\@stuff) )
    {
        print $entry, " is on page ", $pager->current_page, $/;
    }
}
__END__
a is on page 1
--snip--
z is on page 5
于 2013-10-03T15:06:29.953 回答