【问题标题】:What's the name of a structure that allows you to find both by key and value?允许您通过键和值查找的结构的名称是什么?
【发布时间】:2017-09-27 10:41:10
【问题描述】:

我结束了创建一个结构,该结构给定一个哈希图,允许您搜索对应于某个键的值和对应于某个值的键。但我不知道这种结构是否有名称或是否属于任何设计原则/模式

这是一个示例实现:

import { fromArrays } from './objectUtils';

export default class Dict {
    constructor(obj) {
        this.map = obj;
        this._keys = Object.keys(obj);
        this._values = Object.values(obj)
        this.reversed = fromArrays(this._values, this._keys)
    }

    getKeyFor(value) {
        return this.reversed[value]
    }

    getValue(key) {
        return this.map[key]
    }

    hasValue(value) {
        return this.reversed.hasOwnProperty(value)
    }

    get keys() {
        return this._keys
    }

    get values() {
        return this._values
    }

    get object() {
        return this.map
    }
}

我称它为 Dict,但老实说我不知道​​如何称呼它。 如您所见,您必须提供一个将被封装的对象。 实现不是很好,并且在某些情况下它无法正常工作,例如对于非唯一值,但在我当前的用例中这不应该发生,所以这对我来说不是问题。

但是,如果有关于这种结构的文档,我想了解它。我尝试在谷歌上搜索这些功能,但互联网上充斥着关于如何映射和对象或如何在数组中查找的问题和教程。

提前致谢。

【问题讨论】:

标签: javascript


【解决方案1】:

虽然 Javascript 中没有这样的原生结构,但您可能需要查看 this implementation of a BiMap。我想它会给你你想要的。

要安装在 Node 包中,请使用 npm install bimap,然后在代码中包含 bimap.js;从那里,您可以使用new BiMap 创建新的 BiMap。

【讨论】:

  • 所以答案是结构叫BiMap。感谢您顺便指出一个JS实现
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多