动态创建密钥:值对

时间:2011-12-27 18:56:16

标签: groovy groovyshell

我有以下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等)中,我将检查作为Map给出的内容是否存在

'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 个答案:

答案 0 :(得分: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; 
}