2010-10-06 7 views

cevap

11

bu deneyin

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'] 
+1

Çok güzel, o devriğin() 'benziyor' Python en 'zip eşdeğerdir()'. Şimdi sadece çiftler listesi için bir Harita kurucusu varsa. [:] putAll (pairs.collect {new MapEntry (bu [0], it [1])}) 'tek liner olarak çalışır, ancak istediğimden daha çirkin. – ataylor

+0

@ataylor "MapEntry" – NullUserException

+5

'[keys, values] .transpose() .ject ([:]) {map, it -> map << (MapEntry olarak)}' –

5

, ama kolayca bunu çözmek için çeşitli yolları vardır: Alternatif

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 

:

20

Ayrıca Groovy 1.8'de collectEntries işlevi var (şu anda beta)

def keys = [1, 2, 3] 
def values = ['a', 'b', 'c'] 
[keys,values].transpose().collectEntries { it } 
+0

'u kullanmanın başka bir yolu için güncellenmiş gönderime bakın. Çok hoş. Şimdi 1.8 için daha fazla bekliyorum. – ataylor

+5

Kimliğin kapanmasını bile bırakabilirsiniz: '[keys, values] .transpose(). CollectEntries()' –

+0

@ Maxy-B evet, 1.8.5'ten beri :-) –

İlgili konular