Skip to main content

how to create a hashtable in typescript which can store both number and string using generic code




running sample

https://stackblitz.com/edit/typescript-2zlayw


code=>

//hash node
class HashNode<T,U>
{
    key:T
    value:U
    constructor(_key:T,_value:U)
    {
        if(typeof _key==="object")
          throw new Error("object as key not allowed")
        this.key=_key;
        this.value=_value;
    }
    //get key
    public getKey()
    {
       return this.key;
    }
    //get value
    public getValue()
    {
       return this.value;
    }

}
//hash table
class HashTable<T,U>
{
   static TABLE_SIZE = 128;
    private table=[];
   //HashTable
   constructor()
   {
      for(let i=0;i<HashTable.TABLE_SIZE;i++)
      {
          this.table[i]=undefined
      }
   }
   //getHashIndex
   private getHashIndex(_key:T)
   {
     let hashIndex=0;
     if(typeof _key==="number")
     {
         hashIndex=_key%HashTable.TABLE_SIZE;
     }else
     {
        let hash=0
        for(let i=0;i<_key.length;i++)
        {
           hash+=_key[i].charCodeAt();     
        }
         hashIndex=hash%HashTable.TABLE_SIZE;
       
     }
       
   return hashIndex;
   }
   //Put
   public Put(_key:T,_value:U)
   {
       let hashIndex=this.getHashIndex(_key);
       while(this.table[hashIndex]!==undefined  && this.table[hashIndex].getKey()!==_key)
       {
         hashIndex=(hashIndex+1)%HashTable.TABLE_SIZE;
       }
       this.table[hashIndex]=new HashNode<T,U>(_key,_value);
   }  
   //get
   public Get(_key:T):any
   {
       let hashIndex=this.getHashIndex(_key);  
       while(this.table[hashIndex]!==undefined  && this.table[hashIndex].getKey()!=_key)
       {
         hashIndex=(hashIndex+1)%HashTable.TABLE_SIZE;
         if(this.table[hashIndex]===undefined)
           return -1;

       }
       return this.table[hashIndex].getValue();
   }
}

//create a hashtable number as a key
let hashtable=new HashTable<number,string>();
hashtable.Put(1,"apple");
hashtable.Put(2,"mango");
hashtable.Put(3,"banana");
hashtable.Put(7,"cheek");
console.log(hashtable.Get(7));
//create another hashtable string as key
let hashtable1=new HashTable<string,string>();
hashtable1.Put("face1","daragon");
hashtable1.Put("face2","appldaragon");
hashtable1.Put("face3","daragon22323");
hashtable1.Put("face2","manumanu");

console.log(hashtable1.Get("face2"))

Comments

Popular posts from this blog

Better Memory management with PixiJS or How to manage cpu and cpu memory in PixiJS.

PixiJS is my favorite framework when i am looking for a web games specially for mobile or desktop  PixiJS is fast blazing fast and you can get a decent FPS even on older device.   so here is my optimization techniques for PixiJs 1. manage your sprites in a better way use spritesheet to reduce the draw calls create big sprite sheet which contain multiple sprites can be draw in gpu with a single draw call. use TexturePacker  https://www.codeandweb.com/texturepacker  best tool when its comes to spritesheet 2. for floating point calculation round off calculation for example let  speed = 0.75 ; let  position = 100 ; console . log ( Math . round ( speed * position )) 3. don't create very big canvas when u need a big canvas size game just try to create a small canvas and translate it. 4. its very important one managing TextureCache in memory you can get all TextureCache list by using  Object.entries(PIXI.utils.TextureCache); so even you use ap...

adding particles Effect in pixijs using https://pixijs.io/pixi-particles-editor/

adding particle in pixijs is very easy using the below tool more information can be found below https://github.com/pixijs/pixi-particles https://pixijs.io/pixi-particles-editor/ required packages  /// < reference path = "node_modules/pixi-particles/ambient.d.ts" /> import 'pixi-particles' code of particle delcare a     global variable   private emitter ?: Emitter ; const img = PIXI . Texture . from ( "./assets/images/particle.png" ); this . emitter = new Emitter ( this ,[ img ],{ "alpha" : { "start" : 0.62 , "end" : 0.39 }, "scale" : { "start" : 0.1 , "end" : 0.9 , "minimumScaleMultiplier" : 1.25 }, "color" : { "start" : "#ffff8f" , "end" : ...