我已经检查了How best to get map from key list/value list in groovy?
并尝试了那里给出的解决方案,但就我而言,它只给了我一张大小为2的地图,而不是大小为6的地图。
在我的情况下,列表A是:[ABC,DEF,GHI,JKL,MNO,PQR]
ListB为:[1,2,1,1,1,1]
def pairs = [listA, listB].transpose
def map = [:]
pairs.each{ map << (it as MapEntry) }
println(map)
这给了我
[ABC:1, DEF:1]
如何获取如下所示的地图:
[ABC:1, DEF:2, GHI:1,JKL:1, MNO:1, PQR:1]
答案 0 :(得分:2)
您可以将其简化为
def listA = ['ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQR']
def listB = [1,2,1,1,1,1]
def map = [listA, listB].transpose().collectEntries()
assert map == [ABC:1, DEF:2, GHI:1,JKL:1, MNO:1, PQR:1]
要获取条目列表,将其更改为:
def map = [listA, listB].transpose().collect { [id: it[0], num: it[1] as Integer] }
然后,您将获得以下列表:
assert map == [
[id: 'ABC', num:1],
[id: 'DEF', num:2],
[id: 'GHI', num:1],
[id: 'JKL', num:1],
[id: 'MNO', num:1],
[id: 'PQR', num:1]
]
答案 1 :(得分:0)
我运行了您的代码,但是我得到的是{ABC:1,DEF:2,GHI:1,JKL:1,MNO:1,PQR:1]的不同输出(我使用webconsole)
def listA = ['ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQR']
def listB = [1,2,1,1,1,1]
def pairs = [listA, listB].transpose()
def map = [:]
pairs.each{ map << (it as MapEntry) }
println(map)