我需要在迭代地图时修改地图元素,在我的情况下减去一些元素(列表).像这样:
def a = [
1: [1, 2, 3],
2: [3, 2, 4],
3: [3, 2, 4],
4: [5, 2, 1],
]
def b = [3]
println a
a.values().each{ tr ->
tr = tr - b
}
println a
Run Code Online (Sandbox Code Playgroud)
该a地图没有改变.结果是:
[1:[1, 2, 3], 2:[3, 2, 4], 3:[5, 3, 1], 4:[5, 2, 1]]
[1:[1, 2, 3], 2:[3, 2, 4], 3:[5, 3, 1], 4:[5, 2, 1]]
Run Code Online (Sandbox Code Playgroud)
但是,我想要结果[1:[1, 2], 2:[2, 4], 3:[5, 1], 4:[5, 2, 1]].我做错了什么?由于初始地图相当大,我不想构建具有较少元素的另一个地图(结果地图).
直接在地图上工作:
a.keySet().each{
a[it]-=b
}
Run Code Online (Sandbox Code Playgroud)
在您的代码中,您将结果分配给局部变量.
如果您对可能会考虑使用removeAll()或通过迭代b和remove()每个更改的数量感到担忧.那些改变了列表.