2012-06-10 19 views
6

Ich habe eine 3-Ebene verschachtelte Liste in groovy wie dieseimmer Werte von verschachtelten Listen in groovy

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

wie kann ich es iterieren die Namen Werte aus der ersten Teilliste erhält so mag ich wie rsublist = [name1, name2, name3]

Vielen Dank im Voraus.

Antwort

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

Zuerst rList[0] gibt Ihnen die erste Teilliste, die [[12, name1], [22, name2], [49, name3]] ist. Dann wird die spread operator, *., verwendet, um die gleiche Methode, getAt(1), auf jedes Element dieser Liste anzuwenden, die eine Liste mit jedem zweiten Element der Unterlisten zurückgibt, die die gesuchten Werte sind :)

Sie können auch rList[0].collect { it[1] } verwenden, was äquivalent ist und möglicherweise vertrauter ist, wenn Sie nicht an den Spread-Operator gewöhnt sind.

+0

Dank! es funktioniert perfekt –

2

Basierend auf dem @epidemian's answer, hier ist eine besser lesbare Version:

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

+1 = D. Off-Topic: Der Syntax-Highlighter auf StackOverflow ist wirklich seltsam. Warum sollte der Aufruf der "letzten" Methode eine andere Farbe als "first" haben? Ich denke, es erkennt nur ein paar "allgemeine" Schlüsselwörter und Syntaxformen (wie Kommentare und String-Literale, die in verschiedenen Sprachen ziemlich ähnlich sind). Ich wünschte, es wäre etwas mächtiger, vielleicht wie GitHubs Spracherkennung und Syntax Highlighter. – epidemian

Verwandte Themen