Создать пару ключ: значение динамически
У меня есть следующий groovy-скрипт:
#!/usr/bin/env groovy
def files = [
'file-1.bat' :
[
'content-1-1',
'content-1-2',
'content-1-3'
],
'file-1' :
[
'content-unix-1-1',
'content-unix-1-2',
'content-unix-1-3',
],
'file-2.bat' :
[
'content-2-1',
'content-2-2',
'content-2-3'
],
'file-2' :
[
'content-unix-2-1',
'content-unix-2-2',
'content-unix-2-3',
],
]
files.each {
file_key, file_value -> println file_key;
file_value.each {
file_content -> println "\t"+file_content;
files[ file_key ] = [file_content : true];
}
}
println ' Upgraded content';
files.each {
file_key, file_value -> println file_key;
file_value.each {
file_content -> println "\t"+file_content;
}
}
Следующие строки вызывают мои проблемы:
files[ file_key ] = [file_content : true];
Я хочу создать для каждой записи на карте также истинную часть пары ключ: значение... Я знаю, что не определил список таким образом... Я пытался улучшить сопоставить с помощью файлов [file_key].put (ключ, значение); но это не работает... Может быть, я думаю, что в совершенно неправильном направлении... Основой этой конструкции является то, что в файлах (file-1.bat, file-1 и т. д.) я буду проверять существование содержимого дано как карта
'file-1.bat' : [
'content-1-1',
'content-1-2',
'content-1-3'
],
Я мог бы сделать следующее:
'file-1.bat' : [
'content-1-1' : false,
'content-1-2' : false,
'content-1-3' : false,
],
но это именно то, чего я хочу избежать...
1 ответ
Вы правы, думая, что put()
решит вашу проблему, но вы не можете поместить элемент карты в список. Вам нужно сначала создать карту, которая может быть put
в, а затем назначьте полученную карту в качестве выходных данных.
Например:
files.each {
file_key, file_value -> println file_key;
def file_map = [:];
file_value.each {
file_content -> println "\t"+file_content;
file_map.put(file_content, true);
}
files[ file_key ] = file_map;
}