Как я могу использовать хэш-карты для запроса нескольких параметров? - PullRequest
0 голосов
/ 31 января 2019

Как я могу использовать хеш-таблицу (возможно ли это?) Для запроса нескольких параметров, принадлежащих одному и тому же объекту?

Позвольте мне объяснить.

Если у меня есть следующий массивобъектов

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 голосов
/ 01 февраля 2019

Хеш-таблицы требуют, чтобы были известны полные ключи.Если ключ состоит из нескольких полей, и даже одно из них неизвестно, он не работает.

Возможно, вы ищете что-то вроде секционированных хэш-функций:

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

Которые используются в реляционных базах данных, которые поддерживают многомерные индексы.

0 голосов
/ 01 февраля 2019

В 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)]

В другихЯзыки вы должны быть в состоянии реализовать нечто подобное (используя группы элементов в качестве ключей).Это может потребовать реализации пользовательского хеша , но карта хеша все еще является правильной структурой данных для этого.

...