Создать пару ключ: значение динамически - PullRequest
0 голосов
/ 27 декабря 2011

У меня есть следующий 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 (key, value);но это не работает ... Может быть, я думаю, что в совершенно неправильном направлении ... Основой этой конструкции является то, что в файлах (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 Ответ

1 голос
/ 27 декабря 2011

Вы правы, полагая, что 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; 
} 
...