2010-01-14 38 views

回答

14

splice()功能。

+0

謝謝。它確實有幫助。從PHP轉移到Perl不是一件容易的事情:) –

+5

@Antonio:不是一件容易的事,但它確實值得! :) – sebthebert

+0

爲什麼這不是一件容易的工作? – damog

8

您可以使用數組片段是這樣的:

#!/bin/perl -l 

my @array = (1,2,3,4,5,6,7,8,9); 

print join ",", @array[0..2]; 
print join ",", @array[3..5]; 
print join ",", @array[6..$#array]; 
3

要匹配的PHP函數可以使用多種方法:

use strict; 
use warnings; 

use List::MoreUtils qw(natatime part); 

use Data::Dumper; 

my @array = 0..9; 
my $size = 3; 

{ my $i = 0; 
    my @part = part { int($i++/$size) } @array; 
    warn "PART\n"; 
    warn Dumper \@part; 
} 

{ my $iter = natatime($size, @array); 
    my @natatime; 
    while(my @chunk = $iter->()) { 
     push @natatime, \@chunk; 
    } 
    warn "NATATIME\n"; 
    warn Dumper \@natatime; 
} 

{ my @manual; 
    my $i = 0; 

    for(0..$#array) { 
     my $row = int($_/$size); 

     $manual[$row] = [] 
      unless exists $manual[$row]; 

     push @{$manual[$row]}, $array[$_]; 
    } 

    warn "MANUAL:\n"; 
    warn Dumper \@manual; 
} 
2

其中一個更簡單的方法是使用List::MoreUtils,要麼natatimepart函數。

隨着natatime,它創建了一個迭代器,所以這可能不是你想要什麼:在列表

my $iter = natatime 3, @orig_list; 

而且每次調用$iter->()回報3項。

然後就是part

my $i  = 0; 
my @groups = part { int($i++/3) } @orig_array; 

如果您想使這更容易,您可以編寫自己的功能:chunk_array

sub chunk_array { 
    my $size = shift; 
    my $i = 0; 
    return part { int($i++/$size) } @_; 
} 

你會說它是簡單:

my @trios = chunk_array(3, @orig_array);