【问题标题】:Data structure: Two maps that point to the same value数据结构:指向同一个值的两个映射
【发布时间】:2014-10-01 16:48:27
【问题描述】:

我正在寻找一种数据结构,其中多个映射指向相同的值

例如:

  1. 我们有一个对象 A
  2. 我们有两个地图 Map1 和 Map2

    var map1 = { 对象A.attribute1:对象A }

    var map2 = { 对象A.attribute2:对象A }

现在,如果我从一张地图中删除对象,它也应该在另一张地图中删除它。

var attribute1 = objectA.attribute1
var attribute2 = objectA.attribute2
delete map1[attribute1]
map2[attribute2] === null

换句话说,有多种方法可以查找对象,但是一旦删除,所有查找也都消失了。

查看此问题的另一种方法可能是:

这是一种类似于 SQL 的基于行的数据结构。

我们有一个对象数组。可以以类似地图的方式查找对象中的某些属性。并且该对象可以被任何属性删除。

是否有数据结构可以帮助我做到这一点?

【问题讨论】:

    标签: data-structures


    【解决方案1】:

    您应该使用双向哈希。一个将键映射到对象,另一个将对象映射到键。

    通过 key1,key2,...keyN 添加对象:

    通过键列表将对象插入到第一个映射中,并通过对象将键列表添加到映射中,通常您会为此目的使用对象的哈希。

    var map_by_key = { 'key1' : objectA , 'key2' : objectA , ... 'keyN' : objectA }
    var map_by_object = { objectA_hash : [ 'key1' , 'key2' , ... , 'keyN' ] }
    

    按键删除对象:

    通过第一个映射的键获取对象,然后从第二个映射的对象哈希中获取键列表。从第一个映射中删除所有键,最后从第二个映射中删除键。

    【讨论】:

    • 嗨,我添加了一些注释。您能否就是否有其他解决方案给我一些反馈?
    • 这并没有太大变化。我仍然会选择双向哈希。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    相关资源
    最近更新 更多