gpt4 book ai didi

groovy - 如何在groovy中迭代嵌套映射的所有值

转载 作者:行者123 更新时间:2023-12-01 23:24:19 26 4
gpt4 key购买 nike

我有一个未知结构的嵌套映射,目标是迭代映射中的每个值,检查特定条件的值(例如 null)并将这些值替换为其他值。如果 map 结构已知,我可以看到如何做到这一点,但这里的问题是它是未知的。

例如,这可能是传递的映射结构(或者可以有任意数量的嵌套映射):

​def map = [
a:5,
b:"r",
c:[ a1:0, b1:null ],
d:[ a2: [ a3:"", b3:99 ], b2:null ],
...
]

通常对于简单的 map ,人们会使用 this 来更新值:

map.each { it.value == null ? it.value = "" : "" }

但是,对于嵌套 map 结构,此方法将不起作用。

是否有一种有效的方法来迭代未知映射的所有嵌套值以调查和更新值?

最佳答案

您可以对每个都运行它,但是您需要递归映射。例如。请参阅deNull

def deNull(def root) {
root.each{
if (it.value instanceof Map) {
deNull(it.value)
} else if (it.value==null) {
it.value = ""
}
}
}

def map = [
a:5,
b:"r",
c:[ a1:0, b1:null ],
d:[ a2: [ a3:"", b3:99 ], b2:null ],
]
println(map.tap{ deNull it }.inspect())
// => ['a':5, 'b':'r', 'c':['a1':0, 'b1':''], 'd':['a2':['a3':'', 'b3':99], 'b2':'']]

对于正确的方法,我还会传递一个“做什么”的闭包,而不是仅仅在这里处理“de-null-ing”(这使得它可重用)并将其命名为 postwalkMap或类似的东西。

关于groovy - 如何在groovy中迭代嵌套映射的所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51488434/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com