[perl] Créer un tableau à 2 dimensions

Créer un tableau à 2 dimensions [perl] - Perl - Programmation

Marsh Posté le 05-06-2003 à 21:32:02    

Je cherche à me créer un tableau à 2 dimensions
 
en C, je me déclarerais un int value[4][14];
 
mais en perl je ne sais pas comment le créer, et comment accéder à mes données une fois quil serait créé
 
merci

Reply

Marsh Posté le 05-06-2003 à 21:32:02   

Reply

Marsh Posté le 05-06-2003 à 22:54:39    

tu peux faire comme ça  
 
 

Code :
  1. $tableau{4}{14}

Reply

Marsh Posté le 05-06-2003 à 23:55:07    

aline2003 a écrit :

tu peux faire comme ça  
 
 

Code :
  1. $tableau{4}{14}




 
c ca que j'ai utilisé
 
c parce quau départ javais en tete qu'un array en perl cétait nécessairement @array


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 06-06-2003 à 07:25:05    

suivant ton cas tu pourrais utiliser un tableau associatif (hashtable je crois)


---------------
.: Clône de Drasche .:. Ebichuleys .:. Avec l'Aloe Vera je fais de beaux cacas [:dawa] .: www.oserselancer.com :.
Reply

Marsh Posté le 06-06-2003 à 09:54:51    

Urd-sama a écrit :

suivant ton cas tu pourrais utiliser un tableau associatif (hashtable je crois)

Ecrit comme ça : $tableau{4}{14}, on fait en fait référence à un hash du nom de %tableau, et qui est en réalité un hash de hash, non un tableau à 2 dimensions.
 
pour un tableau à 2 dimensions, il faudrait employer par exemple une variable @tableau : $tableau[4][14]
 
imaginons que tu veuilles stocker les valeurs suivantes dans un tableau à deux dimensions, on a 2 lignes de 3 valeurs par ligne, chaque ligne servant d'index. Ci-dessous, un petit code d'exemple avec un tableau contenant ces valeurs et un hash :
 
Valeurs :
    15,20,25
    30,35,40
    70,80,90
 

Code :
  1. my @Array;
  2. my %Hash;
  3. # exemple d'alimentation du tableau
  4. $Array[0][0] = 15;
  5. $Array[0][1] = 20;
  6. $Array[0][2] = 25;
  7. $Array[1][0] = 30;
  8. $Array[1][1] = 35;
  9. $Array[1][2] = 40;
  10. $Array[2][0] = 70;
  11. $Array[2][1] = 80;
  12. $Array[2][2] = 90;
  13. # exemple d'alimentation du hash
  14. $Hash{1}{1} = 15;
  15. $Hash{1}{2} = 20;
  16. $Hash{1}{3} = 25;
  17. $Hash{2}{1} = 30;
  18. $Hash{2}{2} = 35;
  19. $Hash{2}{3} = 40;
  20. $Hash{3}{1} = 70;
  21. $Hash{3}{2} = 80;
  22. $Hash{3}{3} = 90;


 
Dans mon exemple, @Array est un tableau à 2 dimensions. %Hash est un hash qui contient 3 hash ($Hash{1}, $Hash{2} et $Hash{3}), c'est un hash de hash.
 
Voilà en tout cas la notation pour les tableaux et les hachages. crochets pour les tableaux, accolades pour les hachages.


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO -> Google Pixel 9 PRO XL
Reply

Marsh Posté le 06-06-2003 à 12:09:35    

jai fait un tableau alors
 
jai my @value
 
et ensuite j'alimente en faisant $value[$i][$j] = ***


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 06-06-2003 à 12:13:31    


merci  :jap:

Reply

Marsh Posté le 07-06-2003 à 00:56:37    

On peut aussi simuler des tableau à n dimensions avec une hash table
 
par exemple:
 
$a[5][12][24][2] => $a{"5 12 24 2"}
 
et pour l'iterer il suffit de faire un truc du genre:
 
for $x (0..10) {
  for $y (0..10) {
    for $z (0..10) {
      for $k (0..10) {
        $a{"$x $y $z $k"}....
 
Ca peut etre plus rapide que l'equivalent en tableau à plusieur dimensions (une hash table est seulement 15% plus lente qu'un tableau, et la on n'a k'un seul niveau!), mais ca peut egalement prendre plus de place en memoire (les hash tables on tendance à grossir de maniere non lineaire, en doublant leut taille par acoups...).
 
Mais le plus gros avantgae que je vois, et la raison pour laquelle je les utilise, est k'on peut faire un tie à un SDBM file par exemple, pour avoir un truc persistant sur disque, puisque l'on a k'un seul niveau, au lieu de devoir utiliser MLDBN qui est archi lent mais qui est le seul truc dispo pour avec les hash à plusieurs dimensions...
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed