我有一个这样的数组:
def array = [[firstName:Nick], [lastName:Peter], [age:30]]
现在我想将其转换为:
def array = [firstName:Nick, lastName:Peter, age:30]
任何帮助将不胜感激。 感谢。
答案 0 :(得分:4)
在groovy中添加地图会导致相同的行为。这样,地图列表的总和就会得到相同的结果:
def listOfMaps = [[firstName:'Nick'], [lastName:'Peter'], [age:30]]
assert [firstName:'Nick', lastName:'Peter', age:30] == listOfMaps.sum()
答案 1 :(得分:1)
你可以这样做......
def resultMap = [:]
def listOfMaps = [[firstName:'Nick'], [lastName:'Peter'], [age:30]]
listOfMaps.each {
resultMap << it
}
assert resultMap == [firstName: 'Nick', lastName: 'Peter', age: 30]
你在寻找类似的东西吗?
修改强>
要在下面的评论中提出问题......
def resultMap = [:]
def listOfMaps = [[firstName:'Nick'], [lastName:'Peter'], [age:30]]
listOfMaps.each {
resultMap << it
}
assert resultMap == [firstName: 'Nick', lastName: 'Peter', age: 30]
println "First Name: ${resultMap.firstName}"
println "Last Name: ${resultMap.lastName}"
println "Age: ${resultMap.age}"
输出如下:
First Name: Nick
Last Name: Peter
Age: 30
答案 2 :(得分:1)
试试这个:
def array = [[firstName:'Nick'], [lastName:'Peter'], [age:30]]
def res = [:];
array.each() {
res << it
}
print res
答案 3 :(得分:0)
您可以使用许多有用的Groovy Collections来获得结果。
这是一个使用inject,使用空映射初始化,然后在列表的每次迭代中添加它的版本。
def s = listOfMaps.inject([:]) { acc, v -> acc += v; acc }
这可以通过添加到地图,然后将其作为下一次迭代的最后一个值返回。
更短:
def s = listOfMaps.inject([:]) { acc, v -> acc + v }
这是有效的,因为价值&#34; acc + v&#34;也是一个地图,并返回下一次迭代。这里根本没有变异。
Inject是其他语言(如clojure)中reduce的功能等同物。我喜欢这样做,因为它创建了结果,而不是创建一个空地图然后改变它。