structure un peu complexe (pour moi)

Le
kurtz_le_pirate
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"
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
kurtz_le_pirate
Le #17400781
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...


--
klp
"bug : probleme d'interface entre la chaise et le clavier"
mpg
Le #17400941
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
Le #17401381
À (at) Thu, 2 Oct 2008 14:52:34 +0200,
"kurtz_le_pirate"
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 - Perl en français -
Paul Gaborit
Le #17401371
À (at) Thu, 02 Oct 2008 15:33:31 +0200,
Paul Gaborit
À (at) Thu, 2 Oct 2008 14:52:34 +0200,
"kurtz_le_pirate"

[...]
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";

--
Paul Gaborit - Perl en français -
kurtz_le_pirate
Le #17409881
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 :(




--
klp
"bug : probleme d'interface entre la chaise et le clavier"
Publicité
Poster une réponse
Anonyme