Probleme mit doppelter Liste
-
Hallo, ich habe folgendes Problem:
Wenn ich eine Liste aus Listen (mit einem PointF als Inhalt) erstelle,
und jetzt versuche, der Liste in der zweiten Ebene ein Element zuzufügen, dann bewirkt das eine Änderung aller meiner Listenelemente in der ersten Ebene. Das Element wird auch in allen Einträgen der ersten Ebene zugefügt.Folgender Code macht das wohl etwas verständlicher:
//Die Gesamtliste List<List<PointF>^>^ Liste=gcnew List<List<PointF>^>; //Zwischenliste für Punkte erstellen List<PointF>^ punkte = gcnew List<PointF>; punkte->Add(PointF(1,6)); punkte->Add(PointF(3,5)); punkte->Add(PointF(2,4)); punkte->Add(PointF(7,0)); //Zwischenliste dreimal in große Liste eintragen Liste->Add(punkte); Liste->Add(punkte); Liste->Add(punkte); //Debugausgabe: "Count" von allen Listenelementen System::Diagnostics::Debug::WriteLine(Liste[0]->Count); //-->Ausgabe: 4 System::Diagnostics::Debug::WriteLine(Liste[1]->Count); //-->Ausgabe: 4 System::Diagnostics::Debug::WriteLine(Liste[2]->Count); //-->Ausgabe: 4 //Ok, alle Listeneinträge der ersten Ebene haben 4 Elemente der zweiten Ebene //[b]Knackpunkt[/b]: NUR im zweiten Listeintrag noch einen Punkt an Stelle 2 einfügen Liste[1]->Insert(2,PointF(9,8)); //Debugausgabe: "Count" von allen Listenelementen System::Diagnostics::Debug::WriteLine(Liste[0]->Count); //-->Ausgabe: 5 System::Diagnostics::Debug::WriteLine(Liste[1]->Count); //-->Ausgabe: 5 System::Diagnostics::Debug::WriteLine(Liste[2]->Count); //-->Ausgabe: 5 //Jetzt haben alle Listeneinträge der ersten Ebene den Punkt zugewiesen bekommen, und nicht wie gewollt nur Liste[1]!
Ich hoffe, mein Problem ist klar rübergekommen. Was mache ich falsch?
Grüße,
streikbrecher
-
Hallo,
dein Problem ist, dass Du nur eine Liste der 2. Ebene erstellst. In der ersten Ebene hast die zwar drei Einträge, aber die drei Enträge zeigen auf eine identische Liste.
Wenn Du unterschiedliche Einträge haben willst, musst Du auch unterschiedliche Instanzen der Listen erzeugen.