JavaScripでハッシュテーブルを実装してみた
JavaScriptで実装してもまったく意味ない(笑)
ただの練習です。
こんな感じでいいんだろうか?
String.prototype.hash = function(mod) { var sum = 0; for (var i = 0, len = this.length; i < len; i++) sum += this.charCodeAt(i) * i; return (mod) ? (sum%mod) : sum; } var ht = (function(){ var size = 100; var table = new Array(size); return { add: function(obj) { var hash = obj.toString().hash(size); if (table[hash]) table[hash].push(obj); else table[hash] = [obj]; }, has: function(obj) { var hash = obj.toString().hash(size); if (table[hash]) for (var i = 0, len = table[hash].length; i < len; i++) if (table[hash][i] == obj) return true; return false; } } })();
toStringメソッドを持つオブジェクトであれば何でも格納できます。
ht.add("hoge"); ht.has("hoge"); //-> true ht.has("fuga"); //-> false var func = function(){ alert("hoge") } var func2 = function(){ alert("fuga") } ht.add(func); ht.has(func); //-> true ht.has(func2); //-> false ht.add(new String("hoge")); ht.has(new String("hoge")); //-> false /* オブジェクトとして比較しているため */