Node.js - 多图

Node.js - Multimap

我有以下数据(示例)-

1 - "Value1A" 1 - "Value1B" 1 - "Value1C" 2 - "Value2A" 2 - "Value2B"

我对上述数据使用了 Multimaps,因此键 1 有 3 个值(Value1A、Value1B、Value1C),键 2 有 2 个值(Value2A、Value2B)。

当我尝试使用 get 函数检索给定键的所有值时,它起作用了。但是我想获得给定值的密钥。即,如果我有 "Value1C",我想用它从 Multimap 中获取其密钥 1。这可能吗?如果可以,我可以使用除 Multimap 以外的其他方法来实现此结果。

感谢帮助

https://www.npmjs.com/package/multimap

不可能通过单个操作完成此操作,您需要在使用一些额外内存或消耗 CPU 资源之间做出选择。

  1. 使用更多内存

在这种情况下,您需要将数据存储在反向映射中。因此,您将有另一个映射存储为 "Value1C" -> 1。此解决方案可能会导致一致性问题,因为所有操作都需要在两个映射中更新。正本和反本。 此代码的示例是基本的:

//insert
map.set(1, "Value1C");
reverseMap.set("Value1C", 1);

//search
console.log(map.get(reverseMap.get("Value1C")));
  1. 使用更多CPU

在这种情况下,您需要对所有值进行搜索,这将是一个 O(n) 复杂度。如果你的列表太大是不好的,在像 Node.js 这样的单线程环境中更糟糕。 检查下面的代码示例:

function findValueInMultiMap(map, value, callback){
    map.forEachEntry(function (entry, key) {
       for(var e in entry){
          if(entry[e]==value){
             callback(map.get(key));
          }
       }  
    });
}

findValueInMultiMao(map, 'Value1C', function(values){
   console.log(values); 
});