我有Map
如下: -
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 :(得分:4)
编写一个简单的树遍历:
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