Copie entre 2 objets quasimment identiques d'un attribut spécifique [Résolu]

Messages postés
17
Date d'inscription
lundi 15 mai 2006
Statut
Membre
Dernière intervention
6 décembre 2006
- - Dernière réponse : 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

 
Afficher la suite 
A voir également:

4 réponses

Meilleure réponse
Messages postés
17
Date d'inscription
lundi 15 mai 2006
Statut
Membre
Dernière intervention
6 décembre 2006
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 217 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Ro3090
Messages postés
17
Date d'inscription
lundi 15 mai 2006
Statut
Membre
Dernière intervention
6 décembre 2006
0
Merci
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
Commenter la réponse de Ro3090
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
29
0
Merci
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.
Commenter la réponse de Lutinore
Messages postés
17
Date d'inscription
lundi 15 mai 2006
Statut
Membre
Dernière intervention
6 décembre 2006
0
Merci
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
Commenter la réponse de Ro3090