如何使用哈希图查询多个参数?

时间:2019-01-31 20:54:18

标签: algorithm hashmap hashtable

如何使用哈希表(有可能吗?)来查询属于同一对象的多个参数?

让我解释一下。

如果我有以下对象数组

persons = [{name: "AA"}, {name: "BB"}, {name: "CA"}]

我想将它们存储在哈希表中,使用name作为value

hashtable.put(persons[0]); // will compute hash("AA")
hashtable.put(persons[1]); // will compute hash("BB")
hashtable.put(persons[2]); // will compute hash("CA")

这将使我可以非常快速地通过name查询哈希表。

我的问题是,是否有任何哈希表实现可让我查询像这样的更复杂对象的多个参数

persons = [{name: "AA", city: "XX"}, {name: "BB", city: "YY"}, {name: "CA", city: "ZZ"}]

例如。寻找names = "AA"cities = "ZZ"

如果哈希表不适合此类操作,哪种算法或数据结构最适合此类操作?

2 个答案:

答案 0 :(得分:2)

在python中,您可以在哈希图中将tuples用作keys

persons = [{name: "AA", city: "XX"}, {name: "BB", city: "YY"}, {name: "CA", city: "ZZ"}]

hashmap = {}
for d in persons:
    hashmap[(d["name"], d["city"])] = ...

然后,您可以像这样查询您的哈希图:

hashmap[(name, city)]

在其他语言中,您应该能够实现类似的功能(使用元素组作为键)。这可能需要implementing a custom hash,但是哈希映射仍然是正确的数据结构。

答案 1 :(得分:1)

哈希表需要完整的密钥才能知道。如果一个键包含多个字段,甚至一个未知字段都不起作用。

也许您正在寻找分区散列函数之类的东西:

http://mlwiki.org/index.php/Partitioned_Hash_Function_Index

在支持多维索引的关系数据库中使用。