如何在Groovy中从键值列表获取映射?

9 投票
3 回答
6202 浏览
提问于 2025-04-16 05:06

在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) }

撰写回答