Loops groovy映射意外的循环行为

Loops groovy映射意外的循环行为,loops,groovy,scope,Loops,Groovy,Scope,这两个代码块几乎相同,生成的数据结构应该是相同的 slabels是docker标记键上已排序日期时间值的映射。 ind是以后使用的顺序索引值。 dtags是在这里合成的地图。 properties是在此处合成的地图地图 例A def dtags = [:]; slabels.each { ind ++ dtags << ['lastModified': it.value] dtags <

这两个代码块几乎相同,生成的数据结构应该是相同的

slabels
是docker标记键上已排序日期时间值的映射。
ind
是以后使用的顺序索引值。
dtags
是在这里合成的地图。
properties
是在此处合成的地图地图

例A

        def dtags = [:];
        slabels.each {
          ind ++
          dtags << ['lastModified': it.value]
          dtags << ['seq': ind]
          println it.key + ": " + dtags
          properties.put("$it.key", dtags)
        }
        println properties
这里
properties.“$it.key”=dtags
产生相同的结果

例B

        def dtags = [:];
        slabels.each {
          ind ++
          dtags << ['lastModified': it.value]
          dtags << ['seq': ind]
          println it.key + ": " + dtags
          properties."$it.key" = ['lastModified': it.value, 'seq': ind]
        }
        println properties
请注意,
println it.key+:“+dtags
结果相同,但
println属性不同。为清楚起见,示例B是期望的结果

如果我在循环中定义
dtags
,那么这就解决了问题,甚至可能是一个线索

然而,在示例A中,
dtags
似乎在同一范围内使用了两次,产生了不同的结果。简短的问题是,我遗漏了什么


提前感谢

在第一个代码示例中,您将
dtags
的引用放入了
properties
——因此,
dtags
的最后一个赋值是剩下的唯一赋值,并且所有
属性
都是相同的


很难说,这里要解决的首要问题是什么(代码非常复杂),但我假设,通过使用
每个Withindex
/
collect
/…

在示例A中,所有3个道具都将引用相同的映射
dtags
。在循环中,您正在更改此地图中的键(内容),但地图本身保持不变。这更有意义,谢谢。我现在明白了,谢谢。目标是根据“它们的年龄”和“在项目序列中的位置”对日期引用的许多项目进行操作。我的想法是创建一个从一个方法传递到另一个方法的数据结构,这样项的状态是一致的,并且在设置每个方法之前不需要重新评估项。我会按照你的建议寻找更愚蠢的代码。再次感谢你。
        def dtags = [:];
        slabels.each {
          ind ++
          dtags << ['lastModified': it.value]
          dtags << ['seq': ind]
          println it.key + ": " + dtags
          properties."$it.key" = ['lastModified': it.value, 'seq': ind]
        }
        println properties
Result: println it.key + ": " + dtags
1.30: [lastModified:2020-02-12T10:31:19.107+0000, seq:1]
1.29: [lastModified:2020-02-11T15:44:49.658+0000, seq:2]
1.28: [lastModified:2020-02-10T09:22:49.010+0000, seq:3]

Result: println properties
[1.30:[lastModified:2020-02-12T10:31:19.107+0000, seq:1],
1.29:[lastModified:2020-02-11T15:44:49.658+0000, seq:2],
1.28:[lastModified:2020-02-10T09:22:49.010+0000, seq:3]]