Node.js - Multimap

时间:2016-12-25 21:28:36

标签: 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

1 个答案:

答案 0 :(得分:2)

单个操作无法执行此操作,您需要选择使用一些额外内存或消耗CPU资源。

  1. 使用更多内存
  2. 在这种情况下,您需要将数据存储在反向映射中。所以你将有另一张地图存储为“Value1C” - > 1.此解决方案可能会导致一致性问题,因为所有操作都需要在两个映射中更新。原始的和反向的。 此代码的示例是基本的:

    //insert
    map.set(1, "Value1C");
    reverseMap.set("Value1C", 1);
    
    //search
    console.log(map.get(reverseMap.get("Value1C")));
    
    1. 使用更多CPU
    2. 在这个原因中,您将需要搜索所有值,这将是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); 
      });