Existe-t-il un équivalent Perl pour php's array_chunk()?Comment diviser un tableau Perl en tableaux plus petits?
J'essaie de diviser un grand tableau en plusieurs plus petits.
Merci d'avance.
Existe-t-il un équivalent Perl pour php's array_chunk()?Comment diviser un tableau Perl en tableaux plus petits?
J'essaie de diviser un grand tableau en plusieurs plus petits.
Merci d'avance.
splice() fonction.
Vous pouvez utiliser des tranches de tableau comme celui-ci:
#!/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];
Pour correspondre à la fonction PHP, vous pouvez utiliser un certain nombre d'approches:
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;
}
Une des façons plus facile est d'utiliser List::MoreUtils
et soit les fonctions natatime
ou part
.
Avec natatime, il crée un itérateur, donc cela pourrait ne pas être ce que vous voulez:
my $iter = natatime 3, @orig_list;
Et chaque appel à $iter->()
renvoie 3 éléments dans la liste. Il y a ensuite part
.
my $i = 0;
my @groups = part { int($i++/3) } @orig_array;
Si vous voulez vous faciliter la tâche, vous pouvez écrire votre propre fonction: chunk_array
.
sub chunk_array {
my $size = shift;
my $i = 0;
return part { int($i++/$size) } @_;
}
Et vous appelez aussi simple que:
my @trios = chunk_array(3, @orig_array);
Merci. Cela m'a vraiment aidé. Passer de php à perl n'est pas un travail facile :) –
@Antonio: Pas facile, mais ça vaut vraiment le coup! :) – sebthebert
Pourquoi n'est-ce pas un travail facile? – damog