2012-06-10 12 views
6

Ho una lista annidata 3 livelli in Groovy come questovalori che ottengono dalle liste nidificate in Groovy

rList = [[[12, name1],[22,name2],[49,name3]],[[33, name5],[22,name6],[21, name7]]] 

come posso scorrere esso per ottenere i valori del nome dal primo elenco secondario quindi voglio come rsublist = [name1, name2, name3]

Grazie in anticipo.

risposta

7
rList = [[[12, 'name1'], [22, 'name2'], [49, 'name3']], [[33, 'name5'], [22, 'name6'], [21, 'name7']]] 
names = rList[0]*.getAt(1) 
assert names == ['name1', 'name2', 'name3'] 

In primo luogo, rList[0] ti dà il primo elenco, che è [[12, name1], [22, name2], [49, name3]]. Quindi, lo spread operator, *., viene utilizzato per applicare lo stesso metodo, getAt(1), a ogni elemento di tale elenco, che restituirà un elenco con ogni secondo elemento delle sotto-liste, che sono i valori che si cercavano :)

È inoltre possibile utilizzare rList[0].collect { it[1] } che è equivalente e potrebbe essere più familiare se non si è abituati all'operatore di diffusione.

+0

Grazie! funziona perfettamente –

2

Sulla base del @epidemian's answer, ecco una versione più leggibile:

rList.first()*.last() 
+0

+1 = D. Off-topic: l'evidenziatore della sintassi su StackOverflow è davvero strano. Perché la chiamata al metodo last? Ha un colore diverso da 'first'? Penso che riconosca solo un paio di parole chiave "generali" e forme di sintassi (come commenti e stringhe letterali, che sono abbastanza simili tra lingue diverse) Vorrei che fosse qualcosa di più potente, forse come il riconoscimento del linguaggio e l'evidenziatore della sintassi di GitHub. – epidemian

Problemi correlati