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

copie de tableau

5 réponses
Avatar
JEAN
Comment faire une copie de tableau, mais sans instanci=E9 l'original.
Je m'explique,
voici un morceau de mon code,
ARM[1][2]=3DARM[1][1];
ARM[1][3]=3DARM[1][1];
ARM[1][4]=3DARM[1][1];

ARM[1][1] contient un tableau.
en modifiant une valeur :
ARM[1][2][0][1]=3D2;

je modifie non seulement ARM[1][2][0][1] ,mais aussi ARM[1][1][0][1]
et ARM[1][3][0][1] et ARM[1][4][0][1]
puisqu'au lieu de copier le tableau, il ne copie vraissemblablement
que le pointeur.

Y a t-il moyen de copier le tableau et non le pointeur ?

5 réponses

Avatar
ASM
Comment faire une copie de tableau, mais sans instancié l'original.
Je m'explique,
voici un morceau de mon code,
ARM[1][2]=ARM[1][1];
ARM[1][3]=ARM[1][1];
ARM[1][4]=ARM[1][1];

ARM[1][1] contient un tableau.
en modifiant une valeur :
ARM[1][2][0][1]=2;

je modifie non seulement ARM[1][2][0][1] ,mais aussi ARM[1][1][0][1]
et ARM[1][3][0][1] et ARM[1][4][0][1]
puisqu'au lieu de copier le tableau, il ne copie vraissemblablement
que le pointeur.


Il ne copie rien du tout, puisque tes instructions ne disent que
les ARM[1][2], ARM[1][3], ARM[1][4] contiennent le tableau de ARM[1][1]
les 4 trucs sont donc un seul et même tableau.

C'est exactement comme si tu faisais :

ARM = [];
ARM[1] = [];
ARM[1][1] = [];
ARM[1][1][0] = [];
ARM[1][1][0][0] = 'a';
ARM[1][1][0][1] = 'b';

A = ARM[1][1];
B = ARM[1][1];
C = ARM[1][1];
D = B;
C[0][1] = 6;
alert(D);


Y a t-il moyen de copier le tableau et non le pointeur ?


J'ai comme l'impression qu'il faut en créer un tout neuf et le nourrir à
partir de l'original.

RAM = [];
RAM[1] = [];
RAM[1][1] = [];
RAM[1][1][0] = [];
RAM[1][1][0][0] = ARM[1][1][0][0];
RAM[1][1][0][1] = ARM[1][1][0][1];

ARM[1][1][0][1] = 'c';

alert('ARM = '+ARM[1][1][0][1]);
alert('RAM = '+RAM[1][1][0][1]);

--
Stephane Moriaux et son (moins) vieux Mac déjà dépassé

Avatar
Cenekemoi
Comment faire une copie de tableau, mais sans instancié l'original.
Je m'explique,
voici un morceau de mon code,
ARM[1][2]=ARM[1][1];
ARM[1][3]=ARM[1][1];
ARM[1][4]=ARM[1][1];

ARM[1][1] contient un tableau.
en modifiant une valeur :
ARM[1][2][0][1]=2;

je modifie non seulement ARM[1][2][0][1] ,mais aussi ARM[1][1][0][1]
et ARM[1][3][0][1] et ARM[1][4][0][1]
puisqu'au lieu de copier le tableau, il ne copie vraissemblablement
que le pointeur.

Y a t-il moyen de copier le tableau et non le pointeur ?


Le moyen béton pour copier un tableau :

var a = [1,2,3];
var b = a.concat();

"b" peut alors être modifié sans conséquence pour "a".

Toutefois, attention au piège classique :

var a = [ [1,2,3], [4,5,6], [7,8,9] ];
var b = a.concat();

Alors, "b[1] = [0,2];" ne modifiera pas "a", mais :

var c = b[1]; // "c" vaut alors [4,5,6]

c[1] = 99; // "c" vaut alors [4, 99, 6]

...mais "a" vaut alors : [ [1,2,3], [4,99,6], [7,8,9] ];

Il faut donc faire très attention ;
ce qui est dit ici pour les Array est également vrai pour tout objet
Javascript.

Pour fonctionner, voici la duplication de "a" :

var b = [];
for (var i=0; i < a.length; i++) {
b[i] = a[i].concat();
}

--
Cordialement, Thierry ;-)

Avatar
unbewusst.sein
Cenekemoi wrote:

Pour fonctionner, voici la duplication de "a" :

var b = [];
for (var i=0; i < a.length; i++) {
b[i] = a[i].concat();
}


le mieux est de mettre ça dans une function clone :
Array.prototype.clone=function(a){...}
--
Artaban de Médée

Avatar
Cenekemoi
Bonjour à "Une Bévue" qui nous a
Cenekemoi wrote:

Pour fonctionner, voici la duplication de "a" :

var b = [];
for (var i=0; i < a.length; i++) {
b[i] = a[i].concat();
}


le mieux est de mettre ça dans une function clone :
Array.prototype.clone=function(a){...}


D'accord sur le principe du prototype en général, je l'utilise souvent
:-)

Mais, ici, je ne ferais pas !
En effet, cette méthode ne fonctionne qu'avec des Array d'Array (me
fais-je bien comprendre ?).

Si on a:
a = [1,2,3];
b = a.clone();

Le résultat ne sera pas celui espéré...

--
Cordialement, Thierry ;-)


Avatar
unbewusst.sein
Cenekemoi wrote:

En effet, cette méthode ne fonctionne qu'avec des Array d'Array (me
fais-je bien comprendre ?).

Si on a:
a = [1,2,3];
b = a.clone();

Le résultat ne sera pas celui espéré...


ben récursivement ???
--
Artaban de Médée