2017-05-21 3 views
0

Ich arbeite an einer Multi-Plattform-App und ich habe die Datenbank und die Web-Version fertig. Um einen Code in der Web-Version zu überprüfen, erhalte ich eine Hash-Version von der Datenbank und vergleiche die beiden. Ich benutze diesen JavaScript-Code zu Hash (ich dies auf another question gefunden):replizieren JavaScript-Hash-Funktion zu Java/Kotlin

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

Jetzt muß ich in meinem Android App das gleiche tun, aber ich weiß nicht, wie eine Funktion zu machen, die das gleiche gibt in Java oder Kotlin. Weiß jemand wie man das macht oder eine andere plattformübergreifende Vanillelösung hat?

Vielen Dank im Voraus.

Bearbeiten: Ich bin sehr neu zu Kotlin/Java so weiß ich nur, was ich online finden kann und was ich über andere Sprachen weiß. Ich habe versucht, so viel Fehler wie möglich zu entfernen, aber einige Dinge, die ich weiß nicht nur, es gibt immer noch Fehler:

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

Sicher ist das eine einfache Methode zum Schreiben in Java. Was hast du probiert? (Bitte behandeln Sie uns nicht als "Schreibe meinen Code für kostenlose" Service!) –

+0

@StephenC Ich habe nicht hinzugefügt, was ich habe, weil es wahrscheinlich sehr schlechten Code ist und es nicht funktioniert. Aber ich habe es jetzt hinzugefügt. –

Antwort

0

Wenn Sie besorgt mit den Hash-Code bekommen, und nicht die JavaScript-Funktion zu replizieren in Kotlin selbst, Ich schlage vor, Sie können diesen einen Liner verwenden.

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

Ausgang ist 2986048

ich mit JavaScript-Version überprüft, es gleich ist.

Hier ist die documentation für hashCode in Kotlin

offen Spaß hashCode(): Int (Quelle)

Gibt einen Hash-Code-Wert für das Objekt. Der allgemeine Vertrag von hashCode lautet:

Immer wenn es für dasselbe Objekt mehr als einmal aufgerufen wird, muss die hashCode-Methode konsistent die gleiche Ganzzahl zurückgeben, vorausgesetzt, dass keine in Equals-Vergleichen für das Objekt verwendete Information geändert wird.

Wenn zwei Objekte entsprechend der equals() -Methode gleich sind, muss der Aufruf der hashCode-Methode für jedes der beiden Objekte das gleiche ganzzahlige Ergebnis ergeben.

+0

Woah Kumpel, es funktioniert! Ist die Javascript-Version so grundlegend und allgemein, wie es in kotlin als hashCode() eingebaut ist? –

+0

@RobinvanderNoord Ich denke Hashing-Funktionen sind grundlegend, und jede Sprache sollte irgendeine Art von Implementierung haben. Es ist immer besser, die Dokumentation zu überprüfen, bevor Sie sie selbst implementieren :-) – Santosh