2017-05-21 5 views
0

私はマルチプラットフォームアプリケーションで作業しており、データベースとWebバージョンを完成しました。 Webバージョンのコードをチェックするには、データベースからハッシュバージョンを取得し、その2つを比較します。java/kotlinにjavascriptハッシュ関数を複製

hashCode = function(s){ 
    return s.split("").reduce(function(a,b){a=((a<<5)-a)+b.charCodeAt(0);return a&a},0);    
} 

は今、私は私のAndroidアプリで同じことを行う必要があるが、私は同じを出力する関数を作成する方法がわからない:私は(私はanother question上でこれを見つけた)ハッシュするこのJavaScriptコードを使用しますjavaまたはkotlin。誰もがこれを行う方法や他のクロスプラットフォームのバニラソリューションを知っていますか?

ありがとうございます。

編集: 私はkotlin/javaの新機能ですので、私はオンラインで見つけられるものと他の言語について知っているものだけを知っています。私はそれはまだエラーを与え、できるだけ多くのエラーを削除しようとしましたが、私は知らないいくつかのもの:

fun go (a: Int, b: String): Int { 
    var a = ((a shl 5) - a) + Character.codePointAt(b,0); 
    return a and a 
} // this part doesn't give any errors now. 


fun hashCode(s: String): String { 
    return s.split("").reduce(go(a,b)) // I don't know what to pass as parameters + reduce gives an error 
} 
+1

これは確かにJavaで記述する簡単な方法です。何を試しましたか? (私たちを "私のコードを無料で書く"とは思わないでください!) –

+0

@StephenCおそらく非常に悪いコードなので、私は持っているものを追加しませんでした。しかし、私は今それを追加しました。 –

答えて

0

をハッシュコードを取得し、自分自身をkotlinにJavaScript関数を複製ないとあなたが心配ならば、私はこの1つのライナーを使用することをお勧めします。

val s:String = "aaaa"; 
println(s.hashCode()); 

出力は、私はjavascriptのバージョンで確認2986048

、それは同じです。ここで

はkotlin内のhashCodeためdocumentationある

オープン楽しいのhashCode():INT(ソース)

は、オブジェクトのハッシュコード値を返します。 hashCodeの一般規約は次のとおりです。

hashCodeメソッドは、同じオブジェクトに対して複数回呼び出されるたびに、オブジェクトのequals比較で使用される情報が変更されていない限り、常に同じ整数を返す必要があります。

equals()メソッドで2つのオブジェクトが等しい場合、2つのオブジェクトのそれぞれでhashCodeメソッドを呼び出すと、同じ整数結果が生成される必要があります。

+0

うわー、それは動作します! javascriptのバージョンは基本的なので、共通のkotlinはhashCode()として組み込まれていますか? –

+0

@RobinvanderNoordハッシュ関数は基本的なものであり、すべての言語はある種の実装を持つべきだと思います。しかし、自分で実装する前に、ドキュメントをチェックする方がよいでしょう:-) – Santosh

関連する問題