如何最好地从groovy中的键列表/值列表中获取地图?

ata*_*lor 8 python groovy dictionary

在python中,我可以执行以下操作:

keys = [1, 2, 3]
values = ['a', 'b', 'c']
d = dict(zip(keys, values))

assert d == {1: 'a', 2: 'b', 3: 'c'}
Run Code Online (Sandbox Code Playgroud)

有没有一种很好的方法来构建一个groovy中的地图,从一个键列表和一个值列表开始?

tim*_*tes 21

还有collectEntriesGroovy 1.8中的功能

def keys = [1, 2, 3]
def values = ['a', 'b', 'c']
[keys,values].transpose().collectEntries { it }
Run Code Online (Sandbox Code Playgroud)

  • 你甚至可以省略身份闭包:`[keys,values] .transpose().collectEntries()` (5认同)

Nul*_*ion 11

试试这个:

def keys = [1, 2, 3]
def values = ['a', 'b', 'c']
def pairs = [keys, values].transpose()

def map = [:]
pairs.each{ k, v -> map[k] = v }
println map
Run Code Online (Sandbox Code Playgroud)

或者:

def map = [:]
pairs.each{ map << (it as MapEntry) }
Run Code Online (Sandbox Code Playgroud)

  • `[keys,values] .transpose().inject([:]){map,it - > map <<(it as MapEntry)}` (5认同)

Ted*_*eid 5

没有任何东西直接构建到groovy,但有很多方法可以轻松解决它,这里是一个:

def zip(keys, values) {
    keys.inject([:]) { m, k -> m[k] = values[m.size()]; m } 
}

def result = zip([1, 2, 3], ['a', 'b', 'c'])
assert result == [1: 'a', 2: 'b', 3: 'c']
Run Code Online (Sandbox Code Playgroud)