Copie entre 2 objets quasimment identiques d'un attribut spécifique

Résolu
Ro3090 Messages postés 17 Date d'inscription lundi 15 mai 2006 Statut Membre Dernière intervention 6 décembre 2006 - 15 oct. 2006 à 17:45
Ro3090 Messages postés 17 Date d'inscription lundi 15 mai 2006 Statut Membre Dernière intervention 6 décembre 2006 - 19 oct. 2006 à 07:16
Bonjour,

J'ai créer une classe listTerms qui comprend des Termes (des objets) avec comme attributs un poids, un nom, un rang, et une liste d'entier. J'aimerais copier cette liste d'entier dans un autre Terme mais malgré mon algorithme qui me semble correct apparemment la copie ne se fait pas.

voici mon bout de code:
for

(int
i= 1;i<lf.Count;i
++)    //lf correspond à ma liste de termes, c'est un objet de type listTerms que je peux indexer pour accéder à n'importe lequel {                                                 //de ses termes et aux attributs de ses termes

int
pos
;

string n
;

if
(lf[i].listchild! =null
)          //listchild c'est ma liste d'entier que j'aimerais copier d'un terme vers un autre (elle n'est pas forcément pleine){                                              //donc ici quand je trouve un objet terme qui comprend comme attribut une liste d'entier non vide (listchild)

pos= i
;                                    //je récupère son index et le nom de ce terme;

n=lf[i].name
;                      

while
(lf[i].name! =n
){

i
--;                               // et à ce moment-là je parcours la liste de terme vers la gauche pour récupérer}                                   //un terme qui a le même nom que le terme référence de départ.

lf[i].listchild.AddRange(lf[pos].listchild
);    // j'effectue ici la copie de la liste d'entier de mon objet terme de départ (il est en position pos)

Console.WriteLine
("::"+lf[i].listchild
);       //vers un terme qui est lui en position i. Et c'est là que la copie ne fait vraisemblablement pas!!!!

}
Voilà, si vous connaissez un moyen de faire cette opération qui n'a pas l'air difficile mais qui ne fonctionne pas dans cette configuration je suis preneur. J'ai peut être fait une erreur dans mon algo mais je ne la vois pas si c'est le cas.

Je vous remerci d'avance
et à très vite j'espère.

Ro

 

4 réponses

Ro3090 Messages postés 17 Date d'inscription lundi 15 mai 2006 Statut Membre Dernière intervention 6 décembre 2006
19 oct. 2006 à 07:16
C'est bon j'ai résolu le problème pour ma copie d'attribut d'un objet d'une liste vers un objet de la même liste.
J'ai créé 2 classes supplémentaires : une classe pour un objet qui me sert de tampon, j'y met la liste de successeur et un index;  et une classe qui me sert à créer une liste des ces objets tampons.
 Ensuite, je manipule cette liste d'objets tampons afin de mettres mes listes de successeurs où je veux...

voili voilou
je mettrais le code quand mon appli sera finalisé car ça reste pas trop facile à expliquer.

Ro
3
Ro3090 Messages postés 17 Date d'inscription lundi 15 mai 2006 Statut Membre Dernière intervention 6 décembre 2006
16 oct. 2006 à 06:21
En fait ce genre d'affectation marche très bien:

lf[1].listchild=lf[8].listchild;


Donc c'est mon algorithme qui ne va pas, mais je vois pas ce qui cloche.

name       school           teacher         student          teacher                student                             student
weight         1                                                             1                                                                 1                  
index          0                   1                      2                 3                        4                                       5
listchild    {1,2,3}                                                     { 4}                                                              {}
                                       |                                                                     |
                                       |                                                                     |
                                      V                                                                   V
                        name   teacher                                                            student
                        index      1                                                                       4
                      listchild    {4}                                                                   {}

Voici ci-dessus ce que je veux faire et en regardant mon algo je séche encore.
 
Ro
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
16 oct. 2006 à 15:56
Salut, perso j'a rien compris de ce que tu veux faire.  Mais connais tu le différence entre la copie par référence et la copie par valeur, le problème vient peut être de là ? Pour les objets de type référence ( les classes par exemple ) seule la référence ( le pointeur en quelque sorte ) est copiée et donc la copie pointe vers le même emplacement en mémoire et pour les objets de type valeur  ( les structures par exemple )lors d'une copie un nouveau emplacement mémoire est allloué avant d'y copier les valeurs.
0
Ro3090 Messages postés 17 Date d'inscription lundi 15 mai 2006 Statut Membre Dernière intervention 6 décembre 2006
17 oct. 2006 à 04:13
J'y ai pensé mais alors pourquoi une affectation toute simple fonctionne (cf: lf[1].listchild=lf[8].listchild;).
Je vais redétailler ce que je veux faire:

name       school           teacher         student          teacher                student                             student
weight         1                                                             1                                                                 1                  
index          0                   1                      2                 3                        4                                       5
listchild    {1,2}                                                       { 4}                                                              {}
                                       |                                                                     |
                                       |                                                                     |
                                      V                                                                   V
  name      school          teacher           student            teacher              student                          student
  weight       1                                                               1                                                            1            
  index        0                  1                     2                     3                        4                                 5
 listchild   {1,2}             {4}                                                                   {}

Ce que j'ai schématisé ci-dessus correspond à ce que je veux faire. J'ai une liste lf d'objet de type Terme. Un objet Terme a comme attribut un poids (weight), un nom (name), un index, et une liste d'entier (listchild) qui correspond à ses successeurs.
Ma listchild comporte les index des termes qui suivent et qui ont un poids différent de 1. 
Je veux seulement déplacer la listchild d'un terme d'un certain nom (par ex teacher) vers un Terme de même nom (également Teacher mais plus à gauche ) et cela dans la même liste d'objet lf.
Le Terme school n'a pas à être modifié par contre les autres oui.
Ensuite si j'arrive à faire ce déplacement ou copie d'attribut d'un Terme vers un autre j'ai une fonction qui nettoie ma liste des Termes de poids 1; c'est pour cette raison que j'ai besoin de faire cette copie ou ce déplacement.

Je vais retourner un peu mon algo dans tous les sens encore une fois...

Ro
0
Rejoignez-nous