In einigen meiner Programme liegt eine Situation ähnlich wie z.B. am Empfangsschalter eines Kongressbüros vor: Jeder ankommende Besucher soll ein eindeutiges Namensschild bekommen, auch wenn manche Namen mehrfach vorkommen.
Ich benutze dafür im Moment eine selbst geschriebene Hash-Funktion, fände es aber schöner (und es wäre im Prinzip wohl auch schneller) zu diesem Zweck die Map-Library von PB 4.40+ zu verwenden. Folgender Code demonstriert was ich meine:
Code: Alles auswählen
; PB 4.40 Beta 1
EnableExplicit
Define k, p
Define name$
;-- Testdaten (könnten auch z.B. in einer Datei stehen)
Dim people$(10)
people$(0) = "Fred"
people$(1) = "Timo"
people$(2) = "Sara"
people$(3) = "Paul"
people$(4) = "Sara"
people$(5) = "Mary"
people$(6) = "Anna"
people$(7) = "Timo"
people$(8) = "Sara"
people$(9) = "Fred"
;-- Liste der unterschiedlichen Namen aufbauen und Personen mit gleichen Namen durchnummerieren
NewMap nameCount()
For k = 0 To 9
name$ = people$(k)
p = FindMapElement(nameCount(), name$) ;*1
If p = 0
AddMapElement(nameCount(), name$)
EndIf
nameCount(name$) + 1 ;*2
Debug name$ + " #" + Str(nameCount())
Next
Meine Sorge ist, dass in obigem Code der Hash-Table nameCount() 2x nach jedem Element durchsucht wird: einmal an der Stelle *1, und einmal an der Stelle *2. Stimmt das? Wenn nicht, bitte den folgenden Text ignorieren.
Oder kann man das Ergebnis von FindMapElement() (ein Pointer?) irgendwie weiterverwenden? Ich stelle mir sowas vor wie:
Code: Alles auswählen
p = FindMapElement(...)
If p <> 0
SetCurrentMapElement(p)
EndIf
Und ist nach AddMapElement() das neu hinzugefügte Element automatisch das aktuelle?
Gruß, Little John