如何计算字符串集合的哈希码(0..5000个元素)

时间:2013-11-22 16:30:45

标签: javascript algorithm hash comparison

我有一个允许选择地理区域的网页。 我预计不会超过5000个区域。

每个区域都有一个代码(长度为9个字符)。

我想从DB加载一组区域,让用户编辑它。

如果用户进行了任何更改,我想在某处显示“未保存的更改”消息。 为了做到这一点,我想比较集合的原始版本和当前版本。

是否可以计算此集合的哈希码并仅比较哈希码? 元素顺序并不重要,应予以忽略。

该集合目前以这种方式实施

function AreaHashTable(areaIdentifiers) {

    //properties
    this.hash = {};

    this.addKeys(areaIdentifiers); }

AreaHashTable.prototype.getKeys = function () {
    return this.hash; };

AreaHashTable.prototype.hasKey = function (key) {
    if (this.getKeys().hasOwnProperty(key)) {
        return true;
    }
    return false; };

AreaHashTable.prototype.addKey = function (gssCode) {
    this.hash[gssCode] = gssCode;
     };

AreaHashTable.prototype.addKeys = function (areaIdentifiers) {
    var i;
    for (i = 0; i < areaIdentifiers.length; i++) {
        this.addKey(areaIdentifiers[i]);
    }     };


... etc

}

1 个答案:

答案 0 :(得分:2)

您可以迭代字符串集合,生成9个字符的哈希值,通过x-oring每个字符串的字符和相应的哈希字符串字符。这样,您就会收到字符串集合的与订单无关的哈希值。

类似的东西:

var hash = [0,0,0,0,0,0,0,0,0];

for (var strg in strings) {
    for(var i=0; i<9; i++) {
        hash[i] ^= strg.charAt(i);
    }
}

但是,封装数据并保持“已更改”标志可能是潜在问题的另一种解决方案。