groovy перебирать список ключей и значений

#&roovy

#&roovy

Вопрос:

У меня есть этот список:

service_name_status=[a-service=УСТАНОВИТЬ, b-service = ОБНОВИТЬ, C-service= ОБНОВИТЬ, D-service=УСТАНОВИТЬ]

И мне нужно выполнить итерацию по этому списку, чтобы первым элементом было значение параметра с именем «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

}
  

результат должен быть:

ИМЯ_СЛУЖБЫ=a-service

HELM_COMMAND=УСТАНОВИТЬ

ИМЯ_СЛУЖБЫ=b-service

HELM_COMMAND=ОБНОВИТЬ

ИМЯ_СЛУЖБЫ=c-service

HELM_COMMAND=ОБНОВИТЬ

ИМЯ_СЛУЖБЫ=d-service

HELM_COMMAND=УСТАНОВИТЬ

и так далее…

Я не смог найти ничего, что принимало бы какой-либо другой элемент в &roovy, любая помощь будет оценена.

Комментарии:

1. Это service_name_status строка или список строк? Можете ли вы отредактировать пример кода, чтобы он компилировался?

2. Не могли бы вы, пожалуйста, привести реальный пример того, в чем проблема, и убедиться, что она работает, по крайней мере, до такой степени, когда она не работает? Прямо сейчас это просто полно синтаксических ошибок, и оно не будет разбираться. На этом этапе даже не ясно, просто ли вы забыли добавить " или они затерялись в строках. Вашим «списком» может быть что угодно из &roovy list со строками в нем или какая-либо строка, которую вам нужно проанализировать.

Ответ №1:

Нужная вам коллекция — это карта, а не список.

Обратите внимание на кавычки в карте, значения представляют собой строки, поэтому вам нужны кавычки, иначе это не сработает. Возможно, вам придется изменить это в источнике, откуда поступают ваши данные.

Я сохранил все ваши заглавные имена переменных, чтобы вы чувствовали себя как дома, но они не являются общепринятыми.

Обратите внимание на итерацию списка с .each(ключ, значение)

Это сработает:

 Map service_name_status = ['a-service':'INSTALL', 'b-service':'UPGRADE', 'C-service':'UPGRADE', 'D-service':'INSTALL']

service_name_status.each {SERVICE_NAME, HELM_COMMAND -&&t;
    println "SERVICE_NAME=${SERVICE_NAME}"
    println "HELM_COMMAND=${HELM_COMMAND}"
}
  

Редактировать:

Для преобразования этого в карту можно использовать следующее. Будьте осторожны, часть replaceAll хрупка и зависит от того, чтобы данные всегда выглядели одинаково.

 //assumin& you can have it in a strin& like this
Strin& st = "[a-service=INSTALL, b-service=UPGRADE, C-service=UPGRADE, D-service=INSTALL]"
//this part is dependent on format
Strin& mpStr = st.replaceAll(/[/, "['")
                 .replaceAll(/=/, "':'")
                 .replaceAll(/]/, "']")
                 .replaceAll(/, /, "', '")
println mpStr
//convert the properly formatted strin& to a map
Map mp = evaluate(mpStr)
assert mp instanceof java.util.LinkedHashMap
  

Комментарии:

1. Имеющийся у меня список — это то, чем я не могу управлять, поэтому пример с картой на самом деле не помогает, я могу преобразовать список в карту.

2. Я добавил пример, который поможет вам начать