Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

structure un peu complexe (pour moi)

0 views
Skip to first unread message

kurtz_le_pirate

unread,
Oct 2, 2008, 8:16:24 AM10/2/08
to

bonjour,

j'ai un tableau a deux dimensions. chaque �l�ment est un hash que je
remplis comme �a :

my @tableau;
...
my $record={};
$record->{valeur}=' ';
$record->{liste}=[1,2,3,4,5,6,7,8,9];
$record->{card}=9;
$tableau[$ligne][$colonne]=$record;

mais je ne sais pas comment acc�der � la xi�me valeur du tableau dans la
cl� {liste} :(
$tableau[..][..]{liste}[x] bien s�r ne fonctionne pas.

tout comme, pour avoir la taille, le #???$tableau[..][..]{liste}???


merci pour votre aide

--
klp
"bug : probleme d'interface entre la chaise et le clavier"

kurtz_le_pirate

unread,
Oct 2, 2008, 8:52:34 AM10/2/08
to
kurtz_le_pirate wrote:
> bonjour,
>
> j'ai un tableau a deux dimensions. chaque �l�ment est un hash que je
> remplis comme �a :
>
> my @tableau;
> ...
> my $record={};
> $record->{valeur}=' ';
> $record->{liste}=[1,2,3,4,5,6,7,8,9];
> $record->{card}=9;
> $tableau[$ligne][$colonne]=$record;
>
> mais je ne sais pas comment acc�der � la xi�me valeur du tableau dans
> la cl� {liste} :(
> $tableau[..][..]{liste}[x] bien s�r ne fonctionne pas.
>
> tout comme, pour avoir la taille, le #???$tableau[..][..]{liste}???

bon, pour acc�der � la valeur, j'ai trouv� :
@{$tableau[$ll][$cc]{liste}}[x]


par contre, pour la taille, je s�che toujours...

mpg

unread,
Oct 2, 2008, 9:07:26 AM10/2/08
to
Le (on) jeudi 02 octobre 2008 14:16, kurtz_le_pirate a ᅵcrit (wrote) :

> my $record={};
> $record->{valeur}=' ';
> $record->{liste}=[1,2,3,4,5,6,7,8,9];
> $record->{card}=9;
> $tableau[$ligne][$colonne]=$record;
>

Donc lᅵ, $tableau[$ligne][$colonne] est une rᅵfᅵrence ᅵ un hash, et $record
est une rᅵfᅵrence au mᅵme hash. Donc si ultᅵrieurement tu modifies
$record->{liste} tu modifieras aussi $tableau[$ligne][$colonne]{liste} :
est-ce ce que tu veux ?

Tu voulais sans doute plutᅵt ᅵcrire :

$tableau[$ligne][$colonne]={%$record};

qui fait pointer $tableau[$ligne][$colonne] vers un hash anonyme qui est une
copie de celui vers lequel pointe $record au moment de l'assignation.

> mais je ne sais pas comment accᅵder ᅵ la xiᅵme valeur du tableau dans la
> clᅵ {liste} :(
> $tableau[..][..]{liste}[x] bien sᅵr ne fonctionne pas.
>
Il faudrait prᅵciser ᅵ ne fonctionne pas ᅵ et surtout dans quelles
circonstances. En tout cas, chez moi ᅵa marcheᅵᅵ.

> tout comme, pour avoir la taille, le #???$tableau[..][..]{liste}???
>

$#{$tableau[0][0]{liste}}

Manuel.

Paul Gaborit

unread,
Oct 2, 2008, 9:33:31 AM10/2/08
to

� (at) Thu, 2 Oct 2008 14:52:34 +0200,
"kurtz_le_pirate" <kurtzl...@yahoo.fr> �crivait (wrote):

> kurtz_le_pirate wrote:
>> bonjour,
>>
>> j'ai un tableau a deux dimensions. chaque �l�ment est un hash que je
>> remplis comme �a :
>>
>> my @tableau;
>> ...
>> my $record={};
>> $record->{valeur}=' ';
>> $record->{liste}=[1,2,3,4,5,6,7,8,9];
>> $record->{card}=9;
>> $tableau[$ligne][$colonne]=$record;
>>
>> mais je ne sais pas comment acc�der � la xi�me valeur du tableau dans
>> la cl� {liste} :(
>> $tableau[..][..]{liste}[x] bien s�r ne fonctionne pas.
>>
>> tout comme, pour avoir la taille, le #???$tableau[..][..]{liste}???
>
> bon, pour acc�der � la valeur, j'ai trouv� :
> @{$tableau[$ll][$cc]{liste}}[x]
>

Non ! Aucune des deux formulations ne peut fonctionner avec 'x', c'est
s�r. Il vaut donc mieux toujours montrer du *vrai* code ! Ainsi que
les �ventuels messages d'erreur associ�s (avec les bons num�ros de
lignes) : �a aide !

Le code ci-dessous fonctionne tr�s bien :

##########################
#!/usr/bin/perl -w

use strict;
use warnings;

my @tableau;
my $record = {};
$record->{liste} = [1..9];
$tableau[1][2] = $record;

print "4e elements: ", $tableau[1][2]{liste}[3], "\n";
print "Nb elements: ", scalar @{$tableau[1][2]{liste}}, "\n";
##########################

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en fran�ais - <http://perl.enstimac.fr/>

Paul Gaborit

unread,
Oct 2, 2008, 9:43:48 AM10/2/08
to

� (at) Thu, 02 Oct 2008 15:33:31 +0200,
Paul Gaborit <Paul.G...@invalid.invalid> �crivait (wrote):

> � (at) Thu, 2 Oct 2008 14:52:34 +0200,
> "kurtz_le_pirate" <kurtzl...@yahoo.fr> �crivait (wrote):
[...]

>>> tout comme, pour avoir la taille, le #???$tableau[..][..]{liste}???

> print "Nb elements: ", scalar @{$tableau[1][2]{liste}}, "\n";

Une derni�re chose : la notation $# ne donne pas la taille mais
l'indice du dernier �l�ment. On peut aussi l'applique ici par :

print "Dernier element: ", scalar $#{$tableau[1][2]{liste}}, "\n";

kurtz_le_pirate

unread,
Oct 3, 2008, 8:30:49 AM10/3/08
to
Paul Gaborit wrote:
> � (at) Thu, 2 Oct 2008 14:52:34 +0200,
> ..
> ..

> Non ! Aucune des deux formulations ne peut fonctionner avec 'x', c'est
> s�r. Il vaut donc mieux toujours montrer du *vrai* code ! Ainsi que
> les �ventuels messages d'erreur associ�s (avec les bons num�ros de
> lignes) : �a aide !

mea culpu :(

0 new messages