voyez vous un autre moyen ? j'ai pas vraiment compris l'utilité des shift, unshift...
Salut,
J'utilise beaucoup push pour remplir un tableau et shift pour le vider en concervant l'ordre d'insertion.
L'avantage, c'est que je n'ai pas besoin de connaître (et donc de gérer) la taille de mon tableau. J'utilise toujours ce couple dans le cas d'un tableau qui contient à chaque élément quelque chose => la détection de undef me dit que le buffer est vide (utilisation dans la gestion des buffers de socket par exemple).
Mais on peut y arriver aussi avec ta méthode.
There is more than one way to do that ....
Sébastien
kurtz le pirate wrote:
bonjour, je voudrais gérer une pile fifo. pour l'instant je fais :
voyez vous un autre moyen ? j'ai pas vraiment compris l'utilité des
shift, unshift...
Salut,
J'utilise beaucoup push pour remplir un tableau et shift pour le vider
en concervant l'ordre d'insertion.
L'avantage, c'est que je n'ai pas besoin de connaître (et donc de gérer)
la taille de mon tableau.
J'utilise toujours ce couple dans le cas d'un tableau qui contient à
chaque élément quelque chose => la détection de undef me dit que le
buffer est vide (utilisation dans la gestion des buffers de socket par
exemple).
voyez vous un autre moyen ? j'ai pas vraiment compris l'utilité des shift, unshift...
Salut,
J'utilise beaucoup push pour remplir un tableau et shift pour le vider en concervant l'ordre d'insertion.
L'avantage, c'est que je n'ai pas besoin de connaître (et donc de gérer) la taille de mon tableau. J'utilise toujours ce couple dans le cas d'un tableau qui contient à chaque élément quelque chose => la détection de undef me dit que le buffer est vide (utilisation dans la gestion des buffers de socket par exemple).
Mais on peut y arriver aussi avec ta méthode.
There is more than one way to do that ....
Sébastien
Paul Gaborit
À (at) Thu, 11 May 2006 17:39:17 +0200, kurtz le pirate écrivait (wrote):
bonjour, je voudrais gérer une pile fifo. pour l'instant je fais :
... # --- remplissage du tableau for($index=0;$index<$dim;$index++) { $tableau[$index]=[$index,alea(100),alea(100)]; }
foreach my $index (0..$dim-1) { push @tableau, [$index,alea(100),alea(100)]; }
# --- decalage avec perte du dernier element for($index=$dim-2;$index>=0;$index--) { $tableau[$index+1]=[$index+1,$tableau[$index][1],$tableau[$index][2]]; }
# c'est bizarre comme opération : # le premier élément est dupliqué ! # mais on fait quand même ;-)
# suppression du dernier élément pop @tableau; # duplication du premier element # (et donc decalage de tous les autres) unshift @tableau, [@{$tableau[0]}];
# recalcul de l'index qui est stocké (inutilement) dans les valeurs. $tableau[$_][0] = $_ foreach 0..$#tableau;
# --- decalage avec perte du dernier element
for($index=$dim-2;$index>=0;$index--) {
$tableau[$index+1]=[$index+1,$tableau[$index][1],$tableau[$index][2]];
}
# c'est bizarre comme opération :
# le premier élément est dupliqué !
# mais on fait quand même ;-)
# suppression du dernier élément
pop @tableau;
# duplication du premier element
# (et donc decalage de tous les autres)
unshift @tableau, [@{$tableau[0]}];
# recalcul de l'index qui est stocké (inutilement) dans les valeurs.
$tableau[$_][0] = $_ foreach 0..$#tableau;
# --- decalage avec perte du dernier element for($index=$dim-2;$index>=0;$index--) { $tableau[$index+1]=[$index+1,$tableau[$index][1],$tableau[$index][2]]; }
# c'est bizarre comme opération : # le premier élément est dupliqué ! # mais on fait quand même ;-)
# suppression du dernier élément pop @tableau; # duplication du premier element # (et donc decalage de tous les autres) unshift @tableau, [@{$tableau[0]}];
# recalcul de l'index qui est stocké (inutilement) dans les valeurs. $tableau[$_][0] = $_ foreach 0..$#tableau;
À (at) Thu, 11 May 2006 20:46:35 +0200, Sébastien Cottalorda écrivait (wrote): [...]
Mais on peut y arriver aussi avec ta méthode.
There is more than one way to do that ....
Certes mais l'utilisation des fonctions pop, push, shift et unshift est tout de même largement plus rapide qu'une gestion "à la main" !!!
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
kurtz le pirate
In article , Paul Gaborit wrote:
[snip]
pop : suppression (et récupération) du dernier élément du tableau
push : ajout d'un élément après le dernier élément
shift : suppression (et récupération) du premier élément du tableau
unshift : ajout d'un élément avant le premier élément (et donc décalage de tous les autres)
merci paul (comme d'habitude...) pour toutes ses infos.
si l'on veut avoir un pile de taille fixe, il faut gérer la suppression du dernier élément ?
en fait mon exemple est mal choisie. c'est pour ça que tu trouves des "choses bizarres". la vrai utilisation sera de stocker dans $tableau[0]=[$heure,$v1,$v2].
donc à chaque nouvel "instant", je fais : - pop @tableau; - unshift @tableau [$h,$v1,$v2];
j'ai bon ? :)
-- klp
In article <r7wtcr5zef.fsf@vaugirard.enstimac.fr>,
Paul Gaborit <Paul.Gaborit@invalid.invalid> wrote:
[snip]
pop : suppression (et récupération) du dernier élément du tableau
push : ajout d'un élément après le dernier élément
shift : suppression (et récupération) du premier élément du tableau
unshift : ajout d'un élément avant le premier élément (et donc
décalage de tous les autres)
merci paul (comme d'habitude...) pour toutes ses infos.
si l'on veut avoir un pile de taille fixe, il faut gérer la suppression
du dernier élément ?
en fait mon exemple est mal choisie. c'est pour ça que tu trouves des
"choses bizarres". la vrai utilisation sera de stocker dans
$tableau[0]=[$heure,$v1,$v2].
donc à chaque nouvel "instant", je fais :
- pop @tableau;
- unshift @tableau [$h,$v1,$v2];
pop : suppression (et récupération) du dernier élément du tableau
push : ajout d'un élément après le dernier élément
shift : suppression (et récupération) du premier élément du tableau
unshift : ajout d'un élément avant le premier élément (et donc décalage de tous les autres)
merci paul (comme d'habitude...) pour toutes ses infos.
si l'on veut avoir un pile de taille fixe, il faut gérer la suppression du dernier élément ?
en fait mon exemple est mal choisie. c'est pour ça que tu trouves des "choses bizarres". la vrai utilisation sera de stocker dans $tableau[0]=[$heure,$v1,$v2].
donc à chaque nouvel "instant", je fais : - pop @tableau; - unshift @tableau [$h,$v1,$v2];
j'ai bon ? :)
-- klp
Paul Gaborit
À (at) Fri, 12 May 2006 18:22:15 +0200, kurtz le pirate écrivait (wrote):
donc à chaque nouvel "instant", je fais : - pop @tableau; - unshift @tableau [$h,$v1,$v2];
Avec la virgule qui va bien :
- unshift @tableau, [$h,$v1,$v2];
j'ai bon ? :)
Ou l'inverse :
shift @tableau; push @tableau, [$h,$v1,$v2];
En fait, ça dépend de l'ordre qu'on veut conserver dans @tableau. :-)
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
À (at) Fri, 12 May 2006 18:22:15 +0200,
kurtz le pirate <kurtzlepirate@yahoo.fr> écrivait (wrote):
donc à chaque nouvel "instant", je fais :
- pop @tableau;
- unshift @tableau [$h,$v1,$v2];
Avec la virgule qui va bien :
- unshift @tableau, [$h,$v1,$v2];
j'ai bon ? :)
Ou l'inverse :
shift @tableau;
push @tableau, [$h,$v1,$v2];
En fait, ça dépend de l'ordre qu'on veut conserver dans @tableau. :-)
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>