在Python中,我能做到以下几点:如何从groovy的关键列表/值列表中获取地图?
keys = [1, 2, 3]
values = ['a', 'b', 'c']
d = dict(zip(keys, values))
assert d == {1: 'a', 2: 'b', 3: 'c'}
有构建地图的常规,从键的列表和值的列表开始的好方法?
在Python中,我能做到以下几点:如何从groovy的关键列表/值列表中获取地图?
keys = [1, 2, 3]
values = ['a', 'b', 'c']
d = dict(zip(keys, values))
assert d == {1: 'a', 2: 'b', 3: 'c'}
有构建地图的常规,从键的列表和值的列表开始的好方法?
试试这个:
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
或者:
def map = [:]
pairs.each{ map << (it as MapEntry) }
没有直接到常规建造任何东西,但也有许多方法可以轻松地解决这个问题,这里有一个:
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']
还有Groovy 1.8中的collectEntries
函数(目前处于beta版)
def keys = [1, 2, 3]
def values = ['a', 'b', 'c']
[keys,values].transpose().collectEntries { it }
非常好。现在期待1.8更多。 – ataylor 2010-10-07 16:55:18
你甚至可以省略身份关闭:'[keys,values] .transpose()。collectEntries()' – 2013-08-21 18:59:27
@ Maxy-B是的,因为1.8.5 :-) – 2013-08-21 19:02:32
非常好,它看起来像'transpose()'相当于python的'zip()'。现在,如果只有对于列表对的Map构造函数。 '[:]。putAll(pairs.collect {new MapEntry(it [0],it [1])})'作为一行内容,但比我想要的更丑。 – ataylor 2010-10-07 03:53:27
@ataylor查看我更新的帖子,了解另一种使用'MapEntry'的方法 – NullUserException 2010-10-07 04:00:27
'[keys,values] .transpose().injection([:]){map,it - > map <<(它作为MapEntry)}' – 2010-10-07 06:06:08