Ro3090
Messages postés17Date d'inscriptionlundi 15 mai 2006StatutMembreDernière intervention 6 décembre 2006
-
15 oct. 2006 à 17:45
Ro3090
Messages postés17Date d'inscriptionlundi 15 mai 2006StatutMembreDerniè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.
Ro3090
Messages postés17Date d'inscriptionlundi 15 mai 2006StatutMembreDerniè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.
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 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.
Ro3090
Messages postés17Date d'inscriptionlundi 15 mai 2006StatutMembreDerniè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...