Dictionary / Hashmap

Previous topic - Next topic

mangoo

Hallo zusammen,

da ich auf die schnelle kein Dictionary in glbasic gefunden habe, hier ein einfaches Dictionary bzw. eine Hashmap  für Strings. 
Damit kann man sich zu einem String Schlüssel einen String Wert halten/holen

Z.B.

dic as Dictionary
dic.set("kuh","muh")

speichert für den wert "kuh" den wert "muh"


Hinterher kann man sich diesen wieder holen mit

dic.get$("kuh")

wenn man "kuh" nochmals setzen würde würde der wert einfach überschrieben werden.

dic.get liefert 0 wenn der wert nicht gefunden wurde
dic.clear löscht alle elemente
dic.count gibt die anzahl wieder



Code (glbasic) Select
// --------------------------------- //
// Project: feuerware
// Start: Sunday, May 15, 2011
// IDE Version: 9.089

//GLOBAL dic AS Dictionary

//dic.set("a","b")
//dic.set("a","c")
//dic.set("d","edd")

//DEBUG dic.get$("a")
//DEBUG dic.get$("d")
//DEBUG dic.size()



//hashmap:  "a" => "b"
TYPE Dictionary

keys$[]
values$[]

//adds or replace a key value pair
FUNCTION set: key$,value$

FOR i=0 TO LEN(self.keys$)-1
IF self.keys$[i] = key$
self.values$[i] = value$
RETURN
ENDIF
NEXT

//not found, redim
REDIM self.keys$[LEN(self.keys$)+1]
REDIM self.values$[LEN(self.values$)+1]
self.keys$[LEN(self.keys$)-1] = key$
self.values$[LEN(self.values$)-1] = value$

ENDFUNCTION


// returns 0 if doesnt exist
FUNCTION get$: key$
FOR i=0 TO LEN(self.keys$)-1
IF self.keys$[i] = key$
RETURN self.values$[i]
ENDIF
NEXT
RETURN 0
ENDFUNCTION


//how many key values are there?
FUNCTION size:
RETURN LEN(self.keys$)
ENDFUNCTION

//clears all items
FUNCTION clear:
REDIM self.keys$[0]
REDIM self.values$[0]
ENDFUNCTION

FUNCTION remove%: key$
FOR i=0 TO LEN(self.keys$)-1
IF self.keys$[i] = key$
DIMDEL self.keys$[],i
DIMDEL self.values$[],i
RETURN i
ENDIF
NEXT
RETURN -1
ENDFUNCTION

ENDTYPE

Kitty Hello

DDgui has something like that (and used it in the very first versions). Excellent work.
DDgui uses an insert sort algo so the finding of a key is a lot quicker.

backslider

@Kitty:

Wieso schreibst du im deutschen Forum zu einem deutschen Post ne englische Antwort? :D

cheers

Kitty Hello

Ich bin schon ganz verdreht... Sorry.