groovy遍历键和值列表

问题描述

我有此列表:

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