2016-12-25 28 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); 
    });