Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将字符串值散列到间隔[0;1]_Java_Scala - Fatal编程技术网

Java 将字符串值散列到间隔[0;1]

Java 将字符串值散列到间隔[0;1],java,scala,Java,Scala,我需要将pk值(例如1289359,345623p等)散列到间隔[0;1]。映射应该是确定性的,以便在每次运行代码时获得相同的结果(我不想使用种子编号)。 例如,映射1289359的结果可能是0.35(只是一个示例)。 我怎么做?任何暗示都将不胜感激。 最好用Scala给出解决方案,但也可以用Java 更新: 很抱歉,没有发布我尝试作为可能解决方案的代码示例: String myString = "345623p"; double value = Double.parseDouble(myStr

我需要将
pk
值(例如
1289359
345623p
等)散列到间隔[0;1]。映射应该是确定性的,以便在每次运行代码时获得相同的结果(我不想使用种子编号)。 例如,映射
1289359
的结果可能是
0.35
(只是一个示例)。 我怎么做?任何暗示都将不胜感激。 最好用Scala给出解决方案,但也可以用Java

更新:

很抱歉,没有发布我尝试作为可能解决方案的代码示例:

String myString = "345623p";
double value = Double.parseDouble(myString);

我不知道如何将其映射到精确的间隔[0;1]。

您的要求很模糊,但我认为这满足了他们的要求

val r = scala.util.Random

val pks = List("1289359", "345623p")

val hashes = pks.map { pk =>
  r.setSeed(pk.hashCode())
  (pk, r.nextDouble())
}
List((1289359,0.36724077736416283),(345623p,0.243112317891797))

请注意,这种方法会产生一些意想不到的结果。如果键非常接近(例如,与最后一个字符不同),那么散列也将非常接近,这是因为scala的Random.nextDouble是如何工作的。
列表((1234560,0.40817931760409776),(1234561,0.408480629207127),(1234562,0.40835849960496689),(1234563,0.41077718899804194))

散列的结果应该是双精度的吗?@Tom:是的,应该是双精度的。@YuvalItzchakov:我简单地尝试了这个解决方案:
双精度=双精度.parseDouble(myString)。但是如何指定间隔[0;1]?@f1sh:这是限制。我看这没什么问题。见我对尤瓦尔·伊扎科夫的评论。很明显,我试过了。把你的尝试添加到这个问题上。在不知道“要求”的情况下,这是一次很好的尝试。谢谢你,汤姆。这是很有帮助的。我看到了我对我刚刚想到的一个问题的编辑。我发现使用
random
作为哈希函数很难看。也许使用
scala.util.hashing
中的内容更合适?