【问题标题】:replicating javascript hash function to java/kotlin将 javascript 哈希函数复制到 java/kotlin
【发布时间】:2017-05-21 14:18:28
【问题描述】:

我正在开发一个多平台应用程序,我已经完成了数据库和网络版本。为了检查网络版本的代码,我从数据库中得到一个散列版本并比较两者。我使用这个 javascript 代码来散列(我在 another question 上找到了这个):

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

现在我需要在我的 android 应用程序中做同样的事情,但我不知道如何制作一个在 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
}

【问题讨论】:

  • 当然这是用Java编写的一种简单方法。你试过什么? (请不要将我们视为“免费编写我的代码”服务!)
  • @StephenC 我没有添加我所拥有的,因为它可能是非常糟糕的代码并且它不起作用。不过我现在加了。

标签: javascript java android hash kotlin


【解决方案1】:

如果您关心获取哈希码,而不是自己将 javascript 函数复制到 kotlin 中,我建议您可以使用这一行。

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

输出为 2986048

我检查了javascript版本,它是一样的。

这是 kotlin 中 hashCode 的 documentation

open fun hashCode(): Int (source)

返回对象的哈希码值。 hashCode的通用合约是:

只要在同一个对象上多次调用它,hashCode 方法必须始终返回相同的整数,前提是没有修改对象上的 equals 比较中使用的信息。

如果两个对象根据equals()方法相等,那么对这两个对象分别调用hashCode方法必须产生相同的整数结果。

【讨论】:

  • 哇老兄,它有效! javascript 版本是否如此基本和常见的 kotlin 已内置为 hashCode()?
  • @RobinvanderNoord 我认为散列函数是基本的,每种语言都应该有某种实现。不过,在自己实施之前检查文档总是更好:-)
猜你喜欢
  • 2013-06-26
  • 2014-02-01
  • 2011-09-01
  • 1970-01-01
  • 2013-01-10
  • 2012-12-25
  • 1970-01-01
  • 2014-03-03
  • 2013-02-01
相关资源
最近更新 更多