2016-12-25 5 views
-2

I持って、次のデータ(例) -のNode.js - Multimapは

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

キー1が3つの値(Value1A、Value1B、Value1C)を持ち、キー2が2つの値(Value2A、Value2B)を持つように、上記のデータにMultimapsを使用しています。

get関数を使用して特定のキーのすべての値を取得しようとすると、機能します。しかし、私は値を与えられたキーを取得したい。つまり「Value1C」がある場合は、これを使用してマルチマップからキー1を取得します。可能であれば、Multimap以外の方法を使用してこの結果を得ることができますか?単一の操作でこれを行うことはできませんヘルプ

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

答えて

2

ため

おかげで、あなたは使用beetweenいくつかの余分なメモリを選択するか、CPUリソースを消費する必要があります。あなたが逆のマッピングにデータを格納する必要がある。この場合

  1. 使用、より多くのメモリ

。したがって、 "Value1C" - > 1として保存する別のマップがあります。このソリューションは、両方のマップですべての操作を更新する必要があるため、整合性の問題を引き起こす可能性があります。元のものとその逆のもの。 このコードの例では、基本的なものです:あなたはすべての値throught検索を実行する必要があります。この原因で

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

//search 
console.log(map.get(reverseMap.get("Value1C"))); 
  • 使用して、
      より多くの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); 
    });