Seite 2 von 2
Re: Duplikate in List() löschen
Verfasst: 25.01.2015 14:37
von Vera
Nino hat geschrieben:in dem Beispiel-Code wird auch gar kein gemerktes aktuelles Element gelöscht.
Das verstehe ich jetzt wiederum nicht, da in dem Beispiel
verwendet wird.
Wie gesagt, muß ich mir diese, für mich neuen Funktionen erstmal genauer ansehen, um deren Zusammenspiel zu verstehen und wo / wie sie sinnvoll eingesetzt werden können.
Re: Duplikate in List() löschen
Verfasst: 25.01.2015 14:44
von Nino
Vera hat geschrieben:Wie gesagt, muß ich mir diese, für mich neuen Funktionen erstmal genauer ansehen
Wir diskutieren dann besser weiter,
nachdem du das gemacht hast.
(nicht böse gemeint)
Re: Duplikate in List() löschen (alle OS, Anfänger-Tip)
Verfasst: 27.01.2015 14:58
von Tommy
@bobobo
du hast recht. Die Reihenfolge geht dadurch flöten. Wenn man die
Reihenfolge bei behalten möchte dann:
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
Re: Duplikate in List() löschen (alle OS, Anfänger-Tip)
Verfasst: 27.01.2015 19:14
von Vera
Code: Alles auswählen
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"
debug:
Maria
Sarah
Falko
Thomas
Holger
Alf
Dennis
Wo ist da 'Reihenfolge beibehalten' ?
Tommy hat geschrieben: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.
Is eigentlich ganz einfach

Scheint doch nicht so einfach zu sein! ... besonders auch '
puren Anfängern' etwas Solides an die Hand zu geben.
Der Code is nich besonderes
Immerhin, der Auftakt stimmt.
Re: Duplikate in List() löschen (alle OS, Anfänger-Tip)
Verfasst: 27.01.2015 20:48
von Kiffi
na, dann komme ich mal mit meiner berüchtigten Spatzenkanone
Code: Alles auswählen
EnableExplicit
NewList lList.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"
UseSQLiteDatabase()
Define DB = OpenDatabase(#PB_Any, ":memory:", "", "", #PB_Database_SQLite)
If DB
If DatabaseUpdate(DB, "Create Table DummyTable (ID Integer, DummyField Text Unique)")
ForEach lList()
If DatabaseUpdate(DB, "Insert Into DummyTable (ID, DummyField) Values (" + ListIndex(lList()) + ", '" + lList() + "')") = 0
Debug lList() + ": " + DatabaseError() ; ausgeben, was hier aufgrund von Unique NICHT eingefügt wird
EndIf
Next
ClearList(lList())
If DatabaseQuery(DB, "Select DummyField From DummyTable Order By ID")
While NextDatabaseRow(DB)
AddElement(lList()) : lList() = GetDatabaseString(DB, 0)
Wend
FinishDatabaseQuery(DB)
EndIf
EndIf
CloseDatabase(DB)
EndIf
Debug "---"
ForEach lList()
Debug lList()
Next
Zum Hintergrund: Es wird eine SQLite-Datenbank im Speicher (':memory:') angelegt, die eine Tabelle beinhaltet, welche wiederum ein
Unique-Feld enthält. Dieses verhindert, dass doppelte Einträge getätigt werden.
Im Grunde genommen ist es also eine überdimensionierte Map-Funktionalität. Maps haben allerdings die Eigenart, dass die Reihenfolge der darin enthaltenen Elemente nicht beeinflusst werden kann. Sprich: Die Einträge können nicht unbedingt in der Reihenfolge ausgelesen werden, in der man sie eingefügt hat. Leider gibt es auch keine Sort(Structured)Map(), wie man es von LinkedLists oder Arrays her kennt.
Die Einträge der SQLite-Tabelle können hingegen beliebig sortiert werden. Hier: nach der ID; also die Reihenfolge, in der die Einträge eingefügt wurden.
Grüße ... Peter
Re: Duplikate in List() löschen (alle OS, Anfänger-Tip)
Verfasst: 27.01.2015 20:54
von bobobo
Kiffi hat geschrieben:..Leider gibt es auch keine Sort(Structured)Map(), wie man es von LinkedLists oder Arrays her kennt.
..
wär's dann noch map?
Re: Duplikate in List() löschen (alle OS, Anfänger-Tip)
Verfasst: 27.01.2015 21:03
von Kiffi
bobobo hat geschrieben:wär's dann noch map?
man könnte es dann Map+ nennen. Oder PowerMap (obwohl mir PowerNap lieber wäre)
Hier noch mal ne Lösung mit einer Map:
Code: Alles auswählen
EnableExplicit
NewList lList.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"
NewMap myMap.s()
ForEach lList()
If FindMapElement(myMap(), lList())
DeleteElement(lList(), 1)
Else
myMap(lList()) = lList()
EndIf
Next
ClearMap(myMap())
ForEach lList()
Debug lList()
Next
Grüße ... Peter
Re: Duplikate in List() löschen (alle OS, Anfänger-Tip)
Verfasst: 27.01.2015 21:17
von Tommy
Coole SQLite und Map Variante

":memory:" is auch sehr nützlich kannte ich noch nich, thx Peter
