kleine Erweiterung für Maps

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: kleine Erweiterung für Maps

Beitrag von CSHW89 »

Ich hab auch grad an deine Erweiterung gedacht. Wiedermal ein Code von dir, der sinnlos wird :mrgreen:
http://www.purebasic.fr/german/viewtopi ... 71&start=5
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

Re: kleine Erweiterung für Maps

Beitrag von Regenduft »

Danke! Das hat mich auf den richtigen für mein "RenameMapKey()" gebracht. :allright:

Scheint auch ganz gut zu funktionieren. Ich hoffe nur, dass das "Map-Management" nicht durcheinandergebracht wird.
Eventuelle Nutzung auf eigene Gefahr... :wink:
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
Anmerkung: Das ich "US" zu "XYZTrulala" verunstaltet habe hat nichts weiter zu bedeuten. :wink:
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)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: kleine Erweiterung für Maps

Beitrag von STARGÅTE »

@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:

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
Antworten