问题描述
||
编辑
有关映射递归的“正确” Groovy风格的方法,请参见下面的@tim解决方案。由于Groovy中还不存在Map findRecursive,因此如果您发现自己在应用的各个部分都需要此功能,只需将其添加到Map metaClass中即可:
Map.metaClass.findRecursive = {String key->
if(delegate.containsKey(key)) return delegate.\"$key\"
else
for(m in delegate) {
if(m.value in Map) return m.value.findRecursive(key)
}
}
// then anywhere in your app
someMap.findRecursive(\'foo\')
原版的
希望像findResult {it.key == \'foo \'}之类的东西可以遍历深度超过1-d的地图元素,但事实并非如此。
滚动了我自己的递归地图查找器,但想知道是否有更好的方法可以做到这一点。也许我缺少一个内置函数,或者甚至没有一种Groovier(简洁)的方法来实现以下功能:
Map map = [school:[id:\'schoolID\',table:\'_school\',children:[team:[id:\'teamID\',table:\'_team\',children:[player:[id:\'playerID\',table:\'_roster\']]
]]
]]
class Foo {
static finder = {Map map,String key->
if(map.containsKey(key)) return map[key]
else
for(m in map) {
if(m.value in Map) return this.finder(m.value,key)
}
}
}
println Foo.finder(map,\'team\')
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)