Tableau multidimensionnel

Résolu
cs_sidhannowe Messages postés 75 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 11 décembre 2007 - 20 avril 2005 à 16:06
cs_sidhannowe Messages postés 75 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 11 décembre 2007 - 21 avril 2005 à 10:44
Bonjour,



Je souhaite créer un tableau à 2 dimensions de taille dynamique. Le code ci dessous ne marche pas:



tab = new Array();

tab[x][y] = truc;



Merci pour votre aide ;-)

8 réponses

durand2504 Messages postés 163 Date d'inscription mercredi 10 novembre 2004 Statut Membre Dernière intervention 21 février 2006
21 avril 2005 à 09:21
Salut,



en fait, flash ne connait pas les tableaux mais les listes, c'est
pourquoi l'utilisation d'un tableau 2D ou nD n'est pas évidente. Cela
me donne des idées de sources à créer, un objet tableau2D.



Avec splice, on donne 2 arguments, l'index du 1er élément à retirer et le nombre d'élément à retirer.



par ex, pour retirer le 3ème élément: splice(2,1) //index=2 car le premier élément à comme index 0, on retire un seul élément.



pour retire les 6, 7 et8èmes éléments, monTab.splice(5,3)



pour retirer le 5, 8 et 10ème élément,ça ce complique:

monTab.splice(9,1);

monTab.splice(7,1);

monTab.splice(4,1);

Attention, dans ce cas, commence à retirer le dernier élément puis par
index décroissant car si tu commences par l'index le plus bas, tous les
indexs suivant sont modifié, donc l'éléement n deviend n-1 et là tu
risques de te perdre dans les indexs des éléments à supprimer.



A+
3
durand2504 Messages postés 163 Date d'inscription mercredi 10 novembre 2004 Statut Membre Dernière intervention 21 février 2006
20 avril 2005 à 16:52
salut,



riend de plus simple:

tab = new Array();

tab.push([truc,machin]);

letruc=tab[0][0];

lemachin=tab[0][1];



A+
0
cs_sidhannowe Messages postés 75 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 11 décembre 2007
20 avril 2005 à 17:03
En faisant un push([truc, machin]) ca fige la taille à 2 éléments dans une des deux dimensions.



De plus je rempli le tableau à l'aide de 2 boucles, je veut donc donner
au tableau les éléments un par un. Avec une syntaxe de style tab[x][y]
= variable. C'est la déclaration qui me pose un problème en fait.
0
durand2504 Messages postés 163 Date d'inscription mercredi 10 novembre 2004 Statut Membre Dernière intervention 21 février 2006
20 avril 2005 à 17:30
le push ne fige pas la taille, à l'origine, ton tableau est vide, c'est
le push qui permet d'avoir des éléments dedans. ce que tu peux faire:



méthode1:



tab=new Array();

for (i=1;i<=n;i++) { //crée un tableau de dim n,2 rempli de texte vide

tab.push(["",""]);

}

puit tu fais tes boucles avec tab[x][y]=machin



méthode 2:

tab=new Array()
for (i=1;i<=n;i++) {

tab.push([truc,""]);

}

for (i=1;i<=n;i++) {


tab.[i][1]=machin;


}


A+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_sidhannowe Messages postés 75 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 11 décembre 2007
20 avril 2005 à 17:37
Ca fige pas ? Tu dit le contraire dans ta source en parlant de taille
"n,2" : 2 est bien une des deux dimensions qui est figé du coup.



Si je fait ca:

tab.push(["",""]);



avec la boucle associé, je ne pourrais pas utilise d'index supérieur à
1 pour la 2nde dimension cela fera bien un tableau de taille n, 2, moi
je veut un tableau n, k



Pour la seconde méthode j'ai pas bien compris la différence avec la première
0
durand2504 Messages postés 163 Date d'inscription mercredi 10 novembre 2004 Statut Membre Dernière intervention 21 février 2006
20 avril 2005 à 17:56
Ok, pour faire un tableau n,k tu dois faire une liste de n liste de k
élément, flash n'ayant pas de tableau à n dimension (n>1).



2 méthodes (différentes l'une de l'autre):

1) Création d'un tableau vide puis remplissage

for (i=0;i<n;i++){

ligne=[];

for(j=0;j<k,j++){

ligne.push("");

}

tab.push(ligne);

}



Puis tu remplis avec des tab[x][y]=truc de la façon que tu veux.



2)Création d'un tableau remplit directement

for (i=0;i<n;i++){


ligne=[];


for(j=0;j<k,j++){


ligne.push(mesDonnée); //je ne sais pas d'où viennent tes données


}


tab.push(ligne);


}


Dans les 2 cas, si les dimmensions du tableau ne sont pas bonnes, tu peux ajouter/retirer des lignes avec:

tab.push() //ajoute

tab.splice() //retire

et des colonnes avec:

for(i=0;i<n,i++){



tab[i].push();

tab[i].splice();



}



A+
0
cs_sidhannowe Messages postés 75 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 11 décembre 2007
20 avril 2005 à 18:06
Ok, c'est des fonctions du genre splice() que je cherchais alors.
J'avais déjà mis en pratique ton premier exemple mais le tableau varie
beaucoup en dimension, je devais donc créer de gros tableau gourmant en
mémoire.



Par contre on peut bien définir quel éléments on retire avec splice()
ou c'est uniquement le dernier ? Si c'est le cas ca me pose toujours un
problème.



C'est qd meme bizarre qu'on puisse pas créer un tableau à 2 dimensions
dynamiques de la meme manière qu'on le fait avec un tableau une
dimension ...
0
cs_sidhannowe Messages postés 75 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 11 décembre 2007
21 avril 2005 à 10:44
Ok c'est bon, mais finalement je l'utilise pas pour supprimer mais pour
ajouter,car l'index de mon tableau sont des coordonnées, donc pas le
droit de les supprimer (sinon décalage) je définirais juste la valeur à
null
0
Rejoignez-nous