Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

structure un peu complexe (pour moi)

5 réponses
Avatar
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"

5 réponses

Avatar
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]


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


--
klp
"bug : probleme d'interface entre la chaise et le clavier"
Avatar
mpg
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.
Avatar
Paul Gaborit
À (at) Thu, 2 Oct 2008 14:52:34 +0200,
"kurtz_le_pirate" é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/>
Avatar
Paul Gaborit
À (at) Thu, 02 Oct 2008 15:33:31 +0200,
Paul Gaborit écrivait (wrote):
À (at) Thu, 2 Oct 2008 14:52:34 +0200,
"kurtz_le_pirate" é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";

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
Avatar
kurtz_le_pirate
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"