问题描述
我有此列表:
service_name_status = [a-服务=安装,b-服务=升级,C-服务=升级,D-服务=安装]
我需要遍历此列表,因此第一个元素将是名为“ SERVICE_NAME”的参数的值,第二个元素将是名为“ HELM_COMMAND的参数的值“ , 将这些值声明为参数之后,我将运行使用这些参数的命令,然后继续列表中的下一个项目,这些项目应将参数的值替换为项目3和4,依此类推。
所以我要寻找的是这样的东西:
def service_name_status=[a-service=INSTALL,b-service=UPGRADE,C-service=UPGRADE,D-service=INSTALL]
def SERVICE_NAME
def HELM_COMMAND
for(x in service_name_status){
SERVICE_NAME=x(0,2,4,6,8...)
HELM_COMMAND=x(1,3,5,7,9...)
println SERVICE_NAME=$SERVICE_NAME
println HELM_COMMAND=$HELM_COMMAND
}
输出应为:
SERVICE_NAME =一项服务
HELM_COMMAND =安装
SERVICE_NAME = b服务
HELM_COMMAND =升级
SERVICE_NAME = c服务
HELM_COMMAND =升级
SERVICE_NAME = d服务
HELM_COMMAND =安装
以此类推...
我找不到任何需要任何其他因素的东西,我们将不胜感激。
解决方法
您想要的集合是地图,而不是列表。
请注意地图中的引号,这些值是字符串,因此您需要引号,否则它将不起作用。您可能需要在数据来源处进行更改。
我保留了所有大写字母的变量名,以便让您有宾至如归的感觉,但这不是约定。
请注意使用.each(key,value)的列表迭代
这将起作用:
Map service_name_status = ['a-service':'INSTALL','b-service':'UPGRADE','C-service':'UPGRADE','D-service':'INSTALL']
service_name_status.each {SERVICE_NAME,HELM_COMMAND ->
println "SERVICE_NAME=${SERVICE_NAME}"
println "HELM_COMMAND=${HELM_COMMAND}"
}
编辑:
以下内容可用于将其转换为地图。请注意,replaceAll部分易碎,并且依赖于数据,看起来总是一样。
//assuming you can have it in a string like this
String st = "[a-service=INSTALL,b-service=UPGRADE,C-service=UPGRADE,D-service=INSTALL]"
//this part is dependent on format
String mpStr = st.replaceAll(/\[/,"['")
.replaceAll(/=/,"':'")
.replaceAll(/]/,"']")
.replaceAll(/,/,"','")
println mpStr
//convert the properly formatted string to a map
Map mp = evaluate(mpStr)
assert mp instanceof java.util.LinkedHashMap