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

时间:2017-04-26 11:47:48

标签: java scala

我需要将pk值(例如1289359345623p等)散列到区间[0; 1]。映射应该是确定性的,以便每次运行代码时都得到相同的结果(我不想使用种子数)。 例如,映射1289359的结果可能是0.35(仅作为示例)。 我该怎么做?任何提示都将受到高度赞赏。 最好是在Scala中给出解决方案,但它也可能在Java中。

更新:

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

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

我不知道如何将它映射到确切的区间[0; 1]。

1 个答案:

答案 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如何工作,所以哈希也将非常接近。 List((1234560,0.40817931760409776), (1234561,0.4084480629207127), (1234562,0.4083584960496689), (1234563,0.41077718899804194))