使用列表A中的键和列表B中的值构造一个映射

时间:2019-03-29 21:27:34

标签: list dictionary groovy

我已经检查了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]

2 个答案:

答案 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)