Seite 1 von 2
Duplikate in List() löschen (alle OS, Anfänger-Tip)
Verfasst: 21.01.2015 11:27
von Tommy
Der Code is nich besonderes aber vielleicht eine gute Einstiegshilfe für pure Anfänger
die wissen wollen wie man doppelte Listitems löschen kann.
Code: Alles auswählen
Define LastlEntry$
NewList lList.s()
NewList tempList.s()
AddElement(lList()) : lList() = "Thomas"
AddElement(lList()) : lList() = "Maria"
AddElement(lList()) : lList() = "Dennis"
AddElement(lList()) : lList() = "Thomas"
AddElement(lList()) : lList() = "Alf"
AddElement(lList()) : lList() = "Sarah"
AddElement(lList()) : lList() = "Dennis"
AddElement(lList()) : lList() = "Falko"
AddElement(lList()) : lList() = "Thomas"
AddElement(lList()) : lList() = "Alf"
AddElement(lList()) : lList() = "Holger"
AddElement(lList()) : lList() = "Alf"
AddElement(lList()) : lList() = "Dennis"
CopyList(lList(), tempList())
SortList(tempList(), #PB_Sort_Ascending)
ForEach tempList()
If tempList() = LastlEntry$
ForEach lList()
If tempList() = lList()
DeleteElement(lList(), 1)
Break 1
EndIf
Next
EndIf
LastlEntry$ = tempList()
Next
ForEach lList()
Debug lList()
Next
Is eigentlich ganz einfach

Re: Duplikate in List() löschen
Verfasst: 21.01.2015 18:15
von bobobo
So ist es nur nur dann einfach, wenn die Liste sortiert werden darf.
Ich könnte mir vorstellen, dass ab und zu die Reihenfolge von Bedeutung
sein könnte.
Re: Duplikate in List() löschen
Verfasst: 21.01.2015 19:04
von NicTheQuick
In dem Falle böte sich auch noch eine Variante mit Maps an.
Re: Duplikate in List() löschen
Verfasst: 22.01.2015 00:20
von Vera
Danke für die Anregungen.
Um die Reihenfolge zu bewahren, könnte man es mit Hilfe einer zweiten Liste dann so machen:
Code: Alles auswählen
; Mehrfach-Einträge einer Liste aussortieren
; ErgebnisReihenfolge entspricht UrsprungsReihenfolge
EnableExplicit
NewList Names.s()
AddElement(Names()) : Names() = "Thomas"
AddElement(Names()) : Names() = "Maria"
AddElement(Names()) : Names() = "Dennis"
AddElement(Names()) : Names() = "Thomas"
AddElement(Names()) : Names() = "Alf"
AddElement(Names()) : Names() = "Sarah"
AddElement(Names()) : Names() = ""
AddElement(Names()) : Names() = "Dennis"
AddElement(Names()) : Names() = "Falko"
AddElement(Names()) : Names() = "Thomas"
AddElement(Names()) : Names() = "Alf"
AddElement(Names()) : Names() = "Holger"
AddElement(Names()) : Names() = "Alf"
AddElement(Names()) : Names() = "Dennis"
NewList NewNames$()
ForEach Names()
ForEach NewNames$()
If NewNames$() = Names()
DeleteElement(Names())
Break
EndIf
Next
AddElement(NewNames$())
NewNames$() = Names()
Next
; Debug "...."
; ForEach NewNames$()
; Debug NewNames$()
; Next
; Debug "...."
ForEach Names()
Debug Names()
Next
greets ~ Vera
edit: code ergänzt
Re: Duplikate in List() löschen
Verfasst: 22.01.2015 07:58
von Nino
bobobo hat geschrieben:So ist es nur nur dann einfach, wenn die Liste sortiert werden darf.
Auch dafür ist es noch nicht ganz fertig, denn sowas soll ja allgemein funktionieren. Ich habe nur
einen leeren Eintrag zur Liste hinzugefügt, und das Programm stürzt ab.
Code: Alles auswählen
Define NewList lList.s(), LastlEntry$
AddElement(lList()) : lList() = "Thomas"
AddElement(lList()) : lList() = "Maria"
AddElement(lList()) : lList() = "Dennis"
AddElement(lList()) : lList() = "Thomas"
AddElement(lList()) : lList() = "Alf"
AddElement(lList()) : lList() = "Sarah"
AddElement(lList()) : lList() = ""
AddElement(lList()) : lList() = "Dennis"
AddElement(lList()) : lList() = "Falko"
AddElement(lList()) : lList() = "Thomas"
AddElement(lList()) : lList() = "Alf"
AddElement(lList()) : lList() = "Holger"
AddElement(lList()) : lList() = "Alf"
AddElement(lList()) : lList() = "Dennis"
SortList(lList(), #PB_Sort_Ascending)
ForEach lList()
If lList() = LastlEntry$
DeleteElement(lList())
EndIf
LastlEntry$ = lList()
Next
ForEach lList()
Debug lList()
Next
Re: Duplikate in List() löschen
Verfasst: 22.01.2015 10:09
von RSBasic
Dann sollte sein Code nicht mehr abstürzen.
Re: Duplikate in List() löschen
Verfasst: 22.01.2015 13:19
von Vera
Guter Tip
Nino und dank für die schnelle Lösung
RSBasic
Hab's meinem Code ebenfalls beigefügt, auch wenn's dort diese Nebenwirkungen nicht hat.
Re: Duplikate in List() löschen
Verfasst: 25.01.2015 01:49
von Nino
Vera hat geschrieben:Um die Reihenfolge zu bewahren, könnte man es mit Hilfe einer zweiten Liste dann so machen:
Ja, das könnte man.
Aber wenn die Liste lang ist und größere Elemente als nur recht kurze Namen enthält, kann das Kopieren einige Zeit beanspruchen.
Das Gleiche geht (IMHO besser) auch ohne eine zweite Liste, und die fertige Lösung wird sogar schon in PBs Referenz-Handbuch mitgeliefert,

siehe Beispiel-Code bei
http://www.purebasic.com/german/documen ... ition.html
Re: Duplikate in List() löschen
Verfasst: 25.01.2015 13:45
von Vera
Danke für den Tip
Nino
-
PushListPosition() ist mir neu und jetzt auf meiner ToDo-Liste.
Allerdings steht dort auch:
Hinweis: Es ist nicht erlaubt, mit Hilfe der DeleteElement() oder ClearList() Funktionen ein gemerktes aktuelles Element zu löschen. ...
Man müßte dann vermutlich am Ende der gesamten Procedure den 'Stack' zu einer neuen LListe machen, anstatt die bestehende beim Ablauf schon zu bereinigen.
Re: Duplikate in List() löschen
Verfasst: 25.01.2015 14:19
von Nino
Vera hat geschrieben:Allerdings steht dort auch: [...]
Hallo Vera,
ich verstehe jetzt das Problem nicht.
Wie ich schon schrieb, steht dort in der Hilfe doch als Beispiel der fertige Code genau für das hier gegebene Problem.
Und in dem Beispiel-Code wird auch gar kein gemerktes aktuelles Element gelöscht.