2013年1月4日金曜日

JavaScriptでJavaのString#hashCode()を実装する。

普段Javaを利用している人がJavaScriptを利用するとJavaだとすぐにできるのにといったことがよくある。(逆もあるかもしれないが。) そのなかでJavaのString#hashCode()に相当するものがないので作りました。
String.prototype.hashCode = function(){
 var hash = 0;
 for(var i=0 ; i < this.length; i++){     
  hash = hash * 31 + this.charCodeAt(i);
  hash = hash | 0; //符号付き32bit整数にする。
 }
 return hash; 
}
こんな感じでかくとJavaScriptのString型でhashCodeメソッドを使えるように拡張できるようです。 使い方は以下。
"abc".hashCode()
ちなみにJavaのString#hashCode()は以下です。
public int hashCode()
{
  int hashCode = 0;
  int limit = count + offset;
  for (int i = offset; i < limit; i++)
    hashCode = hashCode * 31 + value[i];
  return hashCode;
}
JavaScriptではint型に強制的に変換する場合、ビット演算を行う必要があるらしいのでそれを利用した。ただ後でみて分かりづらいのであまりよくないノウハウではある気がする。

0 件のコメント: