递归搜索地图中的值
recursive search of a value in a map
我正在尝试执行以下操作:我有一个嵌套地图(地图中的地图),我想查明这些地图中是否出现选定值(例如 null)。如果这个值确实出现在任何映射中,我希望函数 return 是一个 true 语句。考虑到这一点,我认为递归函数可以解决问题:
public boolean search(def root) {
found = false
root.each{ def it ->
if (it.value instanceof Map) {
found = search(it.value)
} else if (it.value == null) {
println "value found"
found = true
}
}
return found
}
现在,当使用地图对此进行测试时,即使我的输出表明我的函数正在执行正确的迭代,我也没有得到正确的结果。任何人都可以帮助我为什么会这样。非常感谢!
编辑:这是一张我没有得到预期结果的示例地图。即使有一个值为 null,搜索函数 return 也是一个错误的陈述:
def map = [name: [name: [name:
[test: [selection : [pet : null]]],
age: 42, city: "New York"],
age: 42, city: [name: [name: [test:"New York"]]]],
age: 42, city: "New York"]
public boolean search(def root) {
return root.find{
if (it.value instanceof Map) {
return search(it.value)
} else if (it.value == null) {
return true
}
return false
}
}
我正在尝试执行以下操作:我有一个嵌套地图(地图中的地图),我想查明这些地图中是否出现选定值(例如 null)。如果这个值确实出现在任何映射中,我希望函数 return 是一个 true 语句。考虑到这一点,我认为递归函数可以解决问题:
public boolean search(def root) {
found = false
root.each{ def it ->
if (it.value instanceof Map) {
found = search(it.value)
} else if (it.value == null) {
println "value found"
found = true
}
}
return found
}
现在,当使用地图对此进行测试时,即使我的输出表明我的函数正在执行正确的迭代,我也没有得到正确的结果。任何人都可以帮助我为什么会这样。非常感谢!
编辑:这是一张我没有得到预期结果的示例地图。即使有一个值为 null,搜索函数 return 也是一个错误的陈述:
def map = [name: [name: [name:
[test: [selection : [pet : null]]],
age: 42, city: "New York"],
age: 42, city: [name: [name: [test:"New York"]]]],
age: 42, city: "New York"]
public boolean search(def root) {
return root.find{
if (it.value instanceof Map) {
return search(it.value)
} else if (it.value == null) {
return true
}
return false
}
}