Создать пару ключ: значение динамически

У меня есть следующий 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; 
} 
Другие вопросы по тегам