2016-09-28 42 views
0

搜索價值我下面有一個Map: -如何使用key從地圖以及嵌套地圖

def map = [ 
     a:"a", 
     b:[f:"f", g:"g"], 
     c:"c", 
     d:"d", 
     e:[h:"h", i:[j:"j"]], 
    ] 

在這裏我要給出鍵搜索的價值。但問題提供了關鍵的是唯一的鍵代替嵌套密鑰層次如下: -

println map.a 
println map.j 

這裏產出預期: -

a 
null 

正如你看到的,我不能獲得價值j鍵,我知道,因爲這個鍵不存在於根Map,但它存在於嵌套Map。如果我這樣做: -

println map.e.i.j 

它給了我正確的輸出,但我不知道這個鍵的層次結構。

有沒有什麼辦法通過傳遞準確的鑰匙來從map以上獲得價值?

備註: - 在提供的Map中,所有密鑰始終是唯一的。

+0

最簡單的將是實際不要嵌套地圖,或者他們必須嵌套? –

+0

@Joel鍵可以是根地圖以及嵌套地圖的任何地方,但所有的鍵都是唯一的。 –

+0

所以你不能把j放在根中? –

回答

2

編寫一個簡單的樹遍歷:

def findDeep(Map m, String key) { 
    if (m.containsKey(key)) return m[key] 
    m.findResult { k, v -> v instanceof Map ? findDeep(v, key) : null } 
} 

鑑於你輸入的地圖,下面的測試代碼:

('a'..'k').each { key -> 
    println "${key}: ${findDeep(map, key)}" 
} 

產生以下結果:

a: a 
b: [f:f, g:g] 
c: c 
d: d 
e: [h:h, i:[j:j]] 
f: f 
g: g 
h: h 
i: [j:j] 
j: j 
k: null 
+1

如果標記此事的人會對缺點發表評論,我將不勝感激。 – BalRog