2011-08-17 79 views
0

我得到了一個地圖矩陣,看起來像這樣:Groovy:在地圖深度嵌套

def matrix = [ 
    field1:[role1:[state1:["f1r1s1",true], 
        state2:["f1r1s2",false]], 
      role2:[state1:["f1r2s1",true], 
        state2:["f1r2s2",false]] 
      ], 
    field2:[role1:[state1:["f2r1s1",true], 
        state2:["f2r1s2",false]], 
      role2:[state1:["f2r2s1",true], 
        state2:["f1r2s2",false]] 
      ] 
] 

我想獲得的所有領域,其中的角色是「基於role1」和狀態爲「狀態1」。簡單?請幫助。

+0

你的意思是所有領域**有**是** **有一個狀態1一個基於role1? – rlovtang

+0

是的,我可以做這樣的事情:matrix。*。role1.state1? – dbrin

回答

5
matrix.values().role1.state1 

適用於這種情況,因爲您只有一個未知級別的搜索。

+0

非常好,確實有效。現在,我可以結束以下結構:[field1:[「f1r1s1」,true],field2:[「f2r1s1」,true]]? – dbrin

4

你可以這樣做:

def map = matrix.inject([:]) { map, elem -> map << [ (elem.key): elem.value[ 'role1' ][ 'state1' ] ] } 

得到您想要的結果:

[field1:[f1r1s1, true], field2:[f2r1s1, true]] 
+1

不錯的蒂姆,它幾乎可讀「) – dbrin