gpt4 book ai didi

groovy - 在 map 中循环查找模式 - groovy

转载 作者:行者123 更新时间:2023-12-02 00:11:37 25 4
gpt4 key购买 nike

我想遍历一个 map ,所以如果满足正则表达式条件/模式,我会将值放入另一个 map ,否则我将放入 map {trigger-all=true}。

这是我到目前为止得到的:

def patternsFunc = [
/(?s).*vee\/.*/ : "vee",
/(?s).*$HelmServicesPath\/vee\/.*/ : "vee",
/(?s).*rest\/.*/ : "rest",
/(?s).*$HelmServicesPath\/rest\/.*/ : "rest",
/(?s).*service\/.*/ : "service",
/(?s).*$HelmServicesPath\/service\/.*/ : "service",

]



patternsFunc.find { pattern, cname ->
if (file.find(pattern)) {
triggermap."trigger-${cname}" = true
assert triggermap."trigger-${cname}"
return true //found
} else {
return false
}
}

但是这段代码有两个问题:

  1. 这里的循环会遍历 patternsFunc map 上的每个项目,所以只要每个项目不满足任何条件,而不是在我需要的整个 map 上,我放在“else”中的所有内容都会发生。
  2. 如何将数组中的所有值放入“else”内的映射中?

我真正需要实现的是在不满足任何条件的情况下,这将是 map 的内容:{trigger-all=true}

当满足条件(比如说“vee”和“rest”)时,这将是 map 的内容:{trigger-rest=true,trigger-vee=true} .

最佳答案

首先,找到找到第一个结果,但您想找到所有结果,所以使用 findAll。接下来不要将副作用混入 find 或类似的东西。做“发现”首先,然后处理结果。在这种情况下,您想构建一个从所有结果映射。为此使用 collectEntries

最后如果什么都找不到,你想要后备。所以你可以使用猫王operator ?: 提供一个替代方案,如果生成的 map 是空的。

例如

def patterns = [
(/(?s).*service\/.*/): "service",
]
def file = '/service/'

def triggerMap = patterns.findAll{ // find relevant map entries
file.find(it.key)
}.collectEntries{ // build your map
["trigger-${it.value}", true]
} ?: ["trigger-all": true] // provide a fallback

关于groovy - 在 map 中循环查找模式 - groovy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58816647/

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