如何在Groovy中从键值列表获取映射?
在Python中,我可以这样做:
keys = [1, 2, 3]
values = ['a', 'b', 'c']
d = dict(zip(keys, values))
assert d == {1: 'a', 2: 'b', 3: 'c'}
有没有简单的方法可以在Groovy中构建一个映射,前提是我有一个键的列表和一个值的列表?
3 个回答
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']
22
在Groovy 1.8中,还有一个叫做 collectEntries
的函数。
def keys = [1, 2, 3]
def values = ['a', 'b', 'c']
[keys,values].transpose().collectEntries { it }
12
试试这个:
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) }