#&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. Я добавил пример, который поможет вам начать