BASIC

Author Topic: Dictionary / Hashmap  (Read 2326 times)

Offline mangoo

  • Mc. Print
  • *
  • Posts: 32
    • View Profile
    • feuerware.com
Dictionary / Hashmap
« 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
« Last Edit: 2011-May-15 by mangoo »

Offline Kitty Hello

  • code monkey
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 10715
  • here on my island the sea says 'hello'
    • View Profile
    • http://www.glbasic.com
Re: Dictionary / Hashmap
« Reply #1 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.

Offline backslider

  • Community Developer
  • Prof. Inline
  • ******
  • Posts: 892
    • View Profile
Re: Dictionary / Hashmap
« Reply #2 on: 2011-Jun-09 »
@Kitty:

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

cheers

Offline Kitty Hello

  • code monkey
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 10715
  • here on my island the sea says 'hello'
    • View Profile
    • http://www.glbasic.com
Re: Dictionary / Hashmap
« Reply #3 on: 2011-Jun-10 »
Ich bin schon ganz verdreht... Sorry.