GLBasic forum

Codesnippets => Code Snippets => Topic started by: mangoo on 2011-May-15

Title: Dictionary / Hashmap
Post by: mangoo on 2011-May-15
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
Title: Re: Dictionary / Hashmap
Post by: Kitty Hello on 2011-May-16
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.
Title: Re: Dictionary / Hashmap
Post by: backslider on 2011-Jun-09
@Kitty:

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

cheers
Title: Re: Dictionary / Hashmap
Post by: Kitty Hello on 2011-Jun-10
Ich bin schon ganz verdreht... Sorry.