我需要生成一个包含两个输入(字符串) ex: inputA != inputB为true的散列键
( hash_method(inputA,inputB);
( hash_method(inputB,inputA);
和条件
key1 === key2是真的。
我需要js,但是如果有人可以帮助我使用java或ruby,我可以推演它。或者您有一些插件或js的库将是很好的。我不需要钥匙很安全,但我只需要
谢谢
发布于 2013-12-05 13:43:28
假设Java中用于字符串的哈希代码生成足够好,那么在Javascript中实现它非常简单。如果希望在多个字符串上构建哈希代码(其中字符串的顺序无关),则可以将每个字符串的哈希代码与xor组合。
可以使用一个或多个参数调用以下Javascript函数:
function hash() {
var h=0, i=0;
if(hash.arguments.length == 1) {
for(i=0; i<hash.arguments[0].length; i++) {
h = (h * 31 + hash.arguments[0].charCodeAt(i)) & 0xffffffff;
}
}
else {
for(i in hash.arguments) {
h ^= hash(hash.arguments[i]);
}
}
return h;
}请注意,此函数的结果范围是无符号的([0,2^32>),而不是将[-2^31,2^31>)签名为Java的String#hashCode()。
发布于 2013-12-05 13:23:59
我只是把琴弦的杂音。这是在对象的字段上创建哈希的常见方法。XOR是可换的,所以您的条件应该是真的。
function hash_method(inputAHash, inputBHash) { return inputAHash ^ inputBHash };链接:
这个答案给出了如何在字符串上计算一个好的哈希代码(从inputA和inputB计算散列)。
如何创建哈希代码基于对象的字段(这是一个Java教程,但在JS中同样适用)。
发布于 2013-12-05 16:15:27
我的最后解决办法是:
var hash = function (params) {
var h=0, i=0;
if(typeof (params) === "string") {
for(i=0; i<params.length; i++) {
h = (h * 31 + params.charCodeAt(i)) & 0xffffffff;
}
}
else if( params instanceof Array) {
for(i in params) {
h ^= hash(params[i]);
}
}
return h;
};
var a1 = "pc-1"; var a2 = "router-2";
var params1 = [a1, a2];
hash(params1); //result 6720633
var params2 = [a2,a1];
hash(params2); //result 6720633https://stackoverflow.com/questions/20400906
复制相似问题