2017-03-16 5 views
2

を比較します次に、第1のマップの値に第2のマップ値のリスト(類似のキー用)を掛けます。 その後、私は乗算からdouble型の配列を持つことになります。次に、各インデックスの値を合計したいと思います。例についてはは、私は2つのTreeMap</p> <p>最初のマップがある持っている2つのTreeMapの

地図1:

Apple : 1.0 
Cat:2.1 
Dog:1.2 

マップ2:

Apple:{2.0,0.0,4.0} 
Dog {1.1,0.0,0.0} 
Moon:{0.0,5.0,2.0} 

結果は次のようになります。

Apple{2.0,0.0,4.0} 
Dog{1.32,0.0,0.0} 

その後合計:

{3.32,0.0,4.0} 

これは私の試みです。私は2つの行列の間で検索を行い、次に乗算を行います。

***私の質問各インデックスの総和とspesficインデックスの値を取得する方法を教えてください。添加の可換性を考える

for (Map.Entry<String,Double> entry : m1.entrySet()) { 
List<Double> myList = new ArrayList<Double>(); 
    if (m2.containsKey(entry.getKey())) { 
     //if the key is common in map1 and map2, compare the values 
        double y=entry.getValue(); 
        double j[]=m2.get(entry.getKey()); 
        for (int u=0;u<j.length;u++){ 
         myList.add(j[u]); 
        } 
        for (int i=0;i<myList.size();i++){ 

        System.out.println(entry.getKey()+" "+myList.get(i)*y); 
       } 
       }} 
+0

ここでは、containsKeyの後にgetが続くというコンビネーションはちょうど時間の無駄です。ちょうどgetを使って、それがnullであるかどうかを確認してください。 – MeBigFatGuy

+0

あなたの再生のために@MeBigFatGuy Thxしかし、私はそれを持っていません;(、あなたはもっと説明できますか? – Geek

+0

double j [] = m2.get(entry.getKey()); if(j!= null){ 。 .... } – MeBigFatGuy

答えて

0

、[i]は、Yとjの積を現在のインデックス総和アレイのIを追加し、ループの外側とすべて一致キーの総和アレイを保ちます。

配列のサイズをNとしましょう。次に、

double[] finalSum = new double[N]; 

for (Map.Entry<String,Double> entry : m1.entrySet()) { 
    if (m2.containsKey(entry.getKey())) { 
     //if the key is common in map1 and map2, compare the values 
     double y=entry.getValue(); 
     double j[]=m2.get(entry.getKey()); 
     for (int u=0;u<j.length;u++){ 
      finalSum[u] += y * j[u]; 
     } 
    } 
} 
+0

お返事ありがとうございました。最終的な合計知っているすべてのキーの値が含まれていますが、私の質問どのように各インデックスsperatly、インデックス0の値を合計できますか。 – Geek

関連する問題