2013-10-03 28 views
2

我不知道問題是否清楚,無論如何,我正在使用Net::Google::Spreadsheet從我的谷歌驅動器電子表格中讀取一些數據,並且我按照my @rows = $worksheet->rows獲取數組中的所有行,但是,我想.. (比如@rows在其他數組之間劃分,例如@rows有200個元素,我想給第一個50到@array1和接下來的50到@array2等等,不用計數器(counter++; if (counter > 50) ...)。或者讓我說,我只想獲得70和110之間的元素。如何分頁Perl數組?

回答

6

你可以使用這樣的事情:

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

這被稱爲數據切片。有關更多詳細信息,請參閱此documentation

+0

真棒快捷,非常感謝:) – Mugiwara

+1

不要忘了接受這個答案 –

+2

@psxls感謝您的編輯。我正要改正! – jkshah

5

普通數組切片答案很好。我只是想增加另一個(班級/風格)解決方案的知名度,特別是Data::Page

之前已經說過,這段代碼對CPAN來說「太簡單了」,但我不同意。

它看起來像是矯枉過正,但它使物質變得乾淨,可預測和可重複。當代碼開始跨越一次性階段時,它可以幫助很多。

use strictures; 
use Data::Page; 

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

my $pager = Data::Page->new; 
$pager->total_entries([email protected]); 
$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 
+3

偉大的,謝謝@Ashley ^^,你給了我另一件事的想法。 – Mugiwara