2013-12-20 51 views
-2

我有兩個地圖如下(這是我的輸出的日誌......遺憾的壞常規)比較地圖和一個地圖的值設置爲anothe RMAP

map1 = [ 
    [ "name1":value1, "name2":value2, "name3":value3 ], 
    [ "name1":value1, "name2":value20, "name3":value30 ] 
] 

map2 = [ 
    [ "name1":value1, "name2":value4, "name3":value5, "name4":value6 ], 
    [ "name1":value1, "name2":value7, "name3":value8, "name4":value9 ] 
] 

我需要設置NAME2和MAP1的名稱3的值NAME2和MAP2的NAME3當「名1」:數值在兩個地圖

需要的輸出:

map2 = [ 
    [ "name1":value1, "name2":value2, "name3":value3, "name4":value6 ], 
    [ "name1":value1, "name2":value20, "name3":value30, "name4":value9 ] 
] 

我試圖通過二者的循環,但有一個覆蓋(因爲它是一張地圖)其結果是,如下

MAP2 = [ [ 「NAME1」:值1, 「NAME2」:value20, 「NAME3」:值30, 「NAME4」:value9], [ 「NAME1」:值1, 「NAME2」:value20, 「NAME3」:值30, 「NAME4」:value9] ]

回答

1

首先,他們(MAP1和MAP2)的列表,而不是地圖。

考慮到,這兩個名單的基數是一樣的,簡單地就可以達到同樣的方式:

list2.eachWithIndex{item, i -> 
    if(list2[i].name1 == list1[i].name1){ 
     list2[i].name2 = list1[i].name2 
     list2[i].name3 = list1[i].name3 
    } 
} 

assert list2 == [ 
    [ "name1":'value1', "name2":'value2', "name3":'value3', "name4":'value6' ], 
    [ "name1":'value1', "name2":'value20', "name3":'value30', "name4":'value9' ] 
] 
+0

嗨,我得到空指針異常的list2.eachWithIndex?但列表不爲空(它是否與Groovy 1.5.6兼容?) – Techie

+0

應該不是問題。你究竟試過了什麼? – dmahapatro

+0

我剛剛使用了相同的代碼,並用我的列表名稱替換 – Techie