Как лучше всего получить карту из списка ключей / значений в Groovy? - PullRequest
8 голосов
/ 07 октября 2010

В Python я могу сделать следующее:

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

assert d == {1: 'a', 2: 'b', 3: 'c'}

Есть ли хороший способ построить карту в groovy, начиная со списка ключей и списка значений?

Ответы [ 3 ]

21 голосов
/ 07 октября 2010

Есть также функция collectEntries в Groovy 1.8

def keys = [1, 2, 3]
def values = ['a', 'b', 'c']
[keys,values].transpose().collectEntries { it }
11 голосов
/ 07 октября 2010

Попробуйте это:

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) }
5 голосов
/ 07 октября 2010

Нет ничего встроенного непосредственно в 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']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...