http://www.purebasic.fr/german/viewtopi ... 71&start=5
kleine Erweiterung für Maps
Re: kleine Erweiterung für Maps
Ich hab auch grad an deine Erweiterung gedacht. Wiedermal ein Code von dir, der sinnlos wird
http://www.purebasic.fr/german/viewtopi ... 71&start=5
http://www.purebasic.fr/german/viewtopi ... 71&start=5

http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Re: kleine Erweiterung für Maps
Danke! Das hat mich auf den richtigen für mein "RenameMapKey()" gebracht. 
Scheint auch ganz gut zu funktionieren. Ich hoffe nur, dass das "Map-Management" nicht durcheinandergebracht wird.
Eventuelle Nutzung auf eigene Gefahr...
EDIT: Die Sorgen waren gerechtfertigt. Der folgende Code funktioniert so nicht! (siehe nächtes Posting von STARGÅTE)Anmerkung: Das ich "US" zu "XYZTrulala" verunstaltet habe hat nichts weiter zu bedeuten. 
Scheint auch ganz gut zu funktionieren. Ich hoffe nur, dass das "Map-Management" nicht durcheinandergebracht wird.
Eventuelle Nutzung auf eigene Gefahr...
EDIT: Die Sorgen waren gerechtfertigt. Der folgende Code funktioniert so nicht! (siehe nächtes Posting von STARGÅTE)
Code: Alles auswählen
EnableExplicit
Macro RenameMapKey(Map, Key, NewKey)
_RenameMapKey(FindMapElement(Map,Key), Key, @NewKey)
EndMacro
Procedure.i _RenameMapKey(*Pointer.String, Key$, *NewKey)
If *Pointer
*Pointer - SizeOf(Integer)
Protected *ToNewKey.String = @*NewKey
Swap *Pointer\s, *ToNewKey\s
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
NewMap bla.s()
bla("US") = "United States"
bla("FR") = "France"
bla("DE") = "Germany"
Debug RenameMapKey(bla(), "US", "XYZTrulala")
Debug MapKey(bla())
Debug ""
ForEach bla()
Debug MapKey(bla())+" = "+bla()
Next
Zuletzt geändert von Regenduft am 10.04.2012 01:39, insgesamt 1-mal geändert.
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
Re: kleine Erweiterung für Maps
@Regenduft:
Diese Variante ist leider nicht möglich, wenn nicht sogar ein schwerer Fehler!
Die Map-Keys sind nicht nur einfach Strings, sondern Einträge einer Tabelle zur suche des Elements, wenn ein Key gesucht wird. Eine Map durchsucht ja nicht alle Elemente und vergleich die Keys, sondern nutzt eben eine Hash-Tabelle.
Nachdem der Key verändert wurde, kann man weder über den alten noch über den neuen Key zugreifen, wie du an diesem Beispiel siehst:
Diese Variante ist leider nicht möglich, wenn nicht sogar ein schwerer Fehler!
Die Map-Keys sind nicht nur einfach Strings, sondern Einträge einer Tabelle zur suche des Elements, wenn ein Key gesucht wird. Eine Map durchsucht ja nicht alle Elemente und vergleich die Keys, sondern nutzt eben eine Hash-Tabelle.
Nachdem der Key verändert wurde, kann man weder über den alten noch über den neuen Key zugreifen, wie du an diesem Beispiel siehst:
Code: Alles auswählen
EnableExplicit
Macro RenameMapKey(Map, Key, NewKey)
_RenameMapKey(FindMapElement(Map,Key), Key, @NewKey)
EndMacro
Procedure.i _RenameMapKey(*Pointer.String, Key$, *NewKey)
If *Pointer
*Pointer - SizeOf(Integer)
Protected *ToNewKey.String = @*NewKey
Swap *Pointer\s, *ToNewKey\s
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
NewMap bla.s()
bla("US") = "United States"
bla("FR") = "France"
bla("DE") = "Germany"
RenameMapKey(bla(), "US", "XYZTrulala")
Debug bla("US")
Debug bla("FR")
Debug bla("DE")
Debug bla("XYZTrulala")PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr