8
votes

Comment puis-je initialiser un tableau 2D à Perl?

Comment puis-je initialiser un tableau 2D dans Perl?

J'essaie le code suivant: xxx

mais il donne l'erreur suivante: < BlockQuote>

ne peut pas utiliser String ("1") en tant que tableau Réf. tandis que "référencement strict" en utilisation à ./dyn_pf.pl Ligne 20.

Cette syntaxe semble initialiser un tableau 1D comme print "$ image_events [1] \ n" fonctionne. Bien que Perl ne donne aucune erreur lors de l'affectation.


0 commentaires

4 Réponses :


13
votes

Vous ne pouvez pas avoir de matrice de tableaux dans Perl, uniquement un tableau de références à des tableaux.

print "$frame_events[1][1]\n";


2 commentaires

Notez que cela n'empêche pas les gens de dire "hachage de hachage", "gamme de hachas", etc. dans la conversation quotidienne, car il est compris que chaque valeur d'un hash ou d'une matrice est un scalaire , donc nous savons tous que nous parlons de références.


Pour initialiser un tableau N * N: mon @frame_events = (carte {[(0) x $ n], (1 .. $ n)});



7
votes

2
votes

en Perl Un tableau avec deux tableaux de travail est fusionné dans un seul tableau. Vous voulez des références pour les tableaux internes si vous ne les voulez pas concaténés. Voici une vidage de votre code: xxx

résultat: xxx

et si vous passez à des créateurs de référence, des crochets au lieu des parents, avec Ce code: xxx

vous obtenez ceci: xxx


2 commentaires

"En Perl, une matrice avec deux tableaux de travail est fusionnée dans un seul tableau" - inexact. listes get aplatie . Il n'y a pas de tableaux ici. :)


@Mark: Donnez un poisson à un homme, vous allez le nourrir aujourd'hui. Enseigner à l'homme de la pêche, vous allez le nourrir au reste de la vie. Ry4n a donné du poisson à vous. Vlad Romascanu et Sinan Ünür essayent de vous apprendre à la pêche.



-1
votes

Le moyen le plus rapide est d'utiliser la commande push.

$ taille = 10; Push @matrix, [(0) x $ taille] pour (0. $ Taille);

Ceci créera un tableau 10x10 initialisé avec des zéros.


1 commentaires

En fait une matrice 10x11.