OVH Cloud OVH Cloud

foreach...

8 réponses
Avatar
kurtz le pirate
'soir à tous,

j'ai le morceau de script suivant :
foreach $thisLine (@faces) { ... }

le fonctionnement normal fait que $thisLine est équivalent à $faces[0].

est-il possible de modifier ça pour que dans la première boucle,
$thisLine prenne la valeur de $faces[1] ?


merci,
klp

8 réponses

Avatar
Paul Gaborit
À (at) Wed, 30 Mar 2005 18:23:04 +0200,
kurtz le pirate écrivait (wrote):
j'ai le morceau de script suivant :
foreach $thisLine (@faces) { ... }

le fonctionnement normal fait que $thisLine est équivalent à $faces[0].


... $thisLine est un alias de $faces[0].

est-il possible de modifier ça pour que dans la première boucle,
$thisLine prenne la valeur de $faces[1] ?


Un truc du genre peut dépanner :

foreach my $thisLine (@faces[1..$#faces]) {...}

Mais la bonne question à se poser est « pourquoi @faces contient-il un premier
élément différent des autres ? ». ;-)

--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>

Avatar
kurtz le pirate
In article ,
Paul Gaborit wrote:

À (at) Wed, 30 Mar 2005 18:23:04 +0200,
kurtz le pirate écrivait (wrote):
j'ai le morceau de script suivant :
foreach $thisLine (@faces) { ... }

le fonctionnement normal fait que $thisLine est équivalent à $faces[0].


... $thisLine est un alias de $faces[0].

est-il possible de modifier ça pour que dans la première boucle,
$thisLine prenne la valeur de $faces[1] ?


Un truc du genre peut dépanner :

foreach my $thisLine (@faces[1..$#faces]) {...}

Mais la bonne question à se poser est « pourquoi @faces contient-il un premier
élément différent des autres ? ». ;-)



...oui tu as raison. en fait c'était un problème d'indice que je lis
dans fichier et qui commence par 1 et je mets ces indices dans un
tableau qui commence par 0. mais j'ai résolu mon problème autrement et
j'au un question à ce sujet : peut-on écrire $faces+=x qui ajoute x à
tous les éléments du tableau ?

klp



Avatar
Thomas vO
bonjour,

À (at) Thu, 31 Mar 2005 11:24:39 +0200,
kurtz le pirate nous disait (told us):
...oui tu as raison. en fait c'était un problème d'indice que je lis
dans fichier et qui commence par 1 et je mets ces indices dans un
tableau qui commence par 0. mais j'ai résolu mon problème autrement et
j'au un question à ce sujet : peut-on écrire $faces+=x qui ajoute x à
tous les éléments du tableau ?


non, il faut utiliser une boucle de ce genre :

foreach my $face (@faces) {
$face += x;
}

--
Thomas vO - <http://www.enstimac.fr/~vanouden/>

Avatar
Alex Marandon
On 2005-03-31, Thomas vO wrote:
j'au un question à ce sujet : peut-on écrire $faces+=x qui ajoute x à
tous les éléments du tableau ?


foreach my $face (@faces) {
$face += x;
}


Ou bien avec map :

map { $_ += 42 } @faces;


Avatar
kurtz le pirate
In article ,
Alex Marandon wrote:

On 2005-03-31, Thomas vO wrote:
j'au un question à ce sujet : peut-on écrire $faces+=x qui ajoute x à
tous les éléments du tableau ?


foreach my $face (@faces) {
$face += x;
}


Ou bien avec map :

map { $_ += 42 } @faces;



??? j'avais vaguement vu 'map' dans le chameau bleu mais j'avais
vraiment pas compris qu'on pouvait faire ce genre de chose !

merci encore à tous
klp




Avatar
Paul Gaborit
À (at) 31 Mar 2005 11:03:35 GMT,
Alex Marandon écrivait (wrote):
On 2005-03-31, Thomas vO wrote:
j'au un question à ce sujet : peut-on écrire $faces+=x qui ajoute x à
tous les éléments du tableau ?


foreach my $face (@faces) {
$face += x;
}


Ou bien avec map :

map { $_ += 42 } @faces;


Ou encore (pour éviter d'utiliser 'map' sans en récupérer le résultat même si
cela ne pose plus de problème dans les versions récentes de Perl) :

$_ += 42 foreach @faces;


--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>



Avatar
Mathieu Arnold
kurtz le pirate écrivait:
In article ,
Alex Marandon wrote:


On 2005-03-31, Thomas vO wrote:

j'au un question à ce sujet : peut-on écrire $faces+=x qui ajoute x à
tous les éléments du tableau ?


foreach my $face (@faces) {
$face += x;
}


Ou bien avec map :

map { $_ += 42 } @faces;




??? j'avais vaguement vu 'map' dans le chameau bleu mais j'avais
vraiment pas compris qu'on pouvait faire ce genre de chose !


map et for font a peu près la même chose, on écrira :

for (@valeurs) {
utiliser $_
}

map {
utiliser $_
} @valeurs;

--
Mathieu Arnold





Avatar
Jacques Caron
On Fri, 01 Apr 2005 10:15:46 +0200, Mathieu Arnold <news+
wrote:

map et for font a peu près la même chose, on écrira :

for (@valeurs) {
utiliser $_
}

map {
utiliser $_
} @valeurs;


Une différence importante quand même: map renvoie la liste des résultats,
pas for. Sinon il y a grep aussi, qui lui renvoie la liste des valeurs
originales pour lesquelles le résultat est "vrai", donc pour faire ce
qu'on veut ici ça marcherait aussi (même si, comme map, il calculerait un
résultat pour rien dans le cas présent).

Jacques.
--
Interactive Media Factory
Création, développement et hébergement
de services interactifs: SMS, SMS+, Audiotel...
http://www.imfeurope.com/