2016-12-25 83 views
-2

我有以下的数据(实施例) -的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

回答

2

这是不可能用单一的操作要做到这一点,你需要使用beetween选择一些额外的内存或消耗CPU资源。

  1. 使用更多的内存

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

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

//search 
console.log(map.get(reverseMap.get("Value1C"))); 
  • 使用多个CPU
  • 在这个原因,你需要做一个搜索throught所有的值,这将是一个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); 
    });