Laden...

Doppelte Elemente aus ArrayList löschen

Erstellt von Immo vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.097 Views
I
Immo Themenstarter:in
20 Beiträge seit 2007
vor 17 Jahren
Doppelte Elemente aus ArrayList löschen

Hallo,

in einem ArrayList sind ca. 20 Nummern gespeichert.
Einige Nummern kommen mehrfach vor.
Kennt jemand eine Möglichkeit doppelte Nummern aus dem ArrayList zu löschen??

Danke und Gruß
Stefan

F
722 Beiträge seit 2005
vor 17 Jahren

ja, am einfachsten mit 2 schleifen und ArrayList.Remove().

2.223 Beiträge seit 2005
vor 17 Jahren

Hallo Immo,

eine Schleife - in der schleife prüfen ob nochmalsvorhanden - wenn ja remove wenn nein dann weiter

[edit]zu spät[/edit]

mfg

I
Immo Themenstarter:in
20 Beiträge seit 2007
vor 17 Jahren

Hallo,

Erstmal Danke für eure Antworten!!
Habe nun folgendes versucht(vereinfacht nur für ein Element):


for (int i = 1; i < 20; i++)
     {

            if (MitarbeiterNr[0] == MitarbeiterNr[i])
            {
                  MitarbeiterNr.RemoveAt(i);
                        

             }

      }

Leider löscht er aber die doppelten Elemente nicht, obwohl das Element an der 0. Stelle mehrmals vorkommt.

Warum?

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo zusammen,

bei 20 Elementen ist die Remove-Methode ok. Für große Listen und viele zu löschenden Elemente ist sie nicht zu empfehlen, da sie quadratischen Aufwand hat. Mit linearem Aufwand geht es, wenn man von einer ArrayList alle Elemente außer den zu löschenden in eine neue ArrayList kopiert.

Unter .NET 2.0 sollte man ArrayList möglichst nicht mehr verwenden, sondern stattdessen List<T>.

herbivore

PS: Vermutlich sind die Elemente gleich aber nicht identisch. == testet normalerweise darauf, ob es sich um ein- und dasselbe Objekt handelt. Wenn das so ist, musst du == bzw. Equals für deine Klasse neu definieren.

5.742 Beiträge seit 2007
vor 17 Jahren

Original von Immo
Leider löscht er aber die doppelten Elemente nicht, obwohl das Element an der 0. Stelle mehrmals vorkommt.

Warum?

du musst i natürlich dekrementieren, wenn du etwas an der Stelle i löschst - ansonsten wird das nächste Element übergangen

F
722 Beiträge seit 2005
vor 17 Jahren

beim löschen von elementen aus collections empfiehlt es sich, den zähler der for-schleife runterzuzählen. dann werden auch keine elemente übersprungen.