2014-09-19 243 views
0

好吧,我確定我在這裏做錯了什麼。Groovy Array.addAll方法從原始數組中刪除元素

result = [] 
for (aMp in arMap) { 
    println("0 " + result) 
    println("1 " + aMp) 
    println("2 " + delegate.findSingleMap(aMp)) 
    result.addAll(delegate.findSingleMap(aMp)) 
    println "3 " + result 
} 
return result 

println的結果如下:(我有2個元素arMap,所以它打印四個值的2倍)

0 [] 
1 [ID:XXX, Type:4] 
2 [[First:21/Nov/2013, Type:4, error code:SXR07, ID:XXX, Test ID:5]] 
3 [[First:21/Nov/2013, Type:4, error code:SXR07, ID:XXX, Test ID:5]] 
0 [[First:21/Nov/2013, Type:4, error code:SXR07, ID:XXX, Test ID:5]] 
1 [ID:YYY, Type:4] 
2 [[First:12/Oct/2012, Type:4, error code:SXR07, ID:YYY, Test ID:6]] 
3 [[First:12/Oct/2012, Type:4, error code:SXR07, ID:YYY, Test ID:6]] 

正如你可以正確地看到findSingleMap功能的工作,但第二次使用AddAll時,我的結果數組丟失值XXX。

我在做什麼錯?

+0

你不是所有的代碼。從0開始的字符串是從哪裏來的? – talex 2014-09-19 10:44:07

+0

@talex剛添加。我想知道如果結果在下一個週期開始之前重置,並且我添加了print – SeraphimFoA 2014-09-19 10:44:51

+1

,您的'findSingleMap'是否也可以使用變量'result'?使用你的代碼的簡化版本適用於我(groovy 2.2.1),並且'addAll'按照廣告的方式工作。 – cfrick 2014-09-19 11:20:08

回答

1

正如OP int所述,方法findSingleMap修改了(全局)result變量。

for (aEl in map) { 
    result = result.findAll { it[aEl.key] == aEl.value } 
} 

return result 

不是寫在前面def變量聲明它(在簡單的腳本)全球性的,這可能會導致這樣奇怪的行爲。所以不要這樣做,除非你必須編碼。