将关联数组转换为Groovy

时间:2016-09-27 08:53:44

标签: groovy

我有两个长度相同的String[]。它们是"关联数组"从某种意义上说,一个字符串的值是而另一个的字符串值是

String[] keys = { 'fizz', 'buzz', 'bupo' }
String[] values = { 'true', 'false', 'yes' }

我想将这两个关联数组转换为具有一些Groovy魔法的Map<String,String>。到目前为止,我已经尝试了以下但是它无法正常工作:

Map<String,String> kvPairs = [keys, values]

我出错的任何想法?

3 个答案:

答案 0 :(得分:6)

你可以这样做:

String[] keys = [ "fizz", "buzz", "bupo" ] 
String[] vals = [ "true", "false", "yes" ]
Map<String, String> kvPairs = [ keys, vals ].transpose()​.collectEntries()​

结果:

[fizz:true, buzz:false, bupo:yes]

答案 1 :(得分:0)

就像你说的那样

  

我有两个长度相同的String []。

然后你可以利用groovy的eachWithIndex功能

如果你有

String[] keys = [ 'fizz', 'buzz', 'bupo' ]
String[] values = [ 'true', 'false', 'yes' ]

然后你可以简单地做

Map kvPairs = [:]

​keys.eachWithIndex{ element, index ->
    kvPairs << [(element) : values[index]]
}
println kvPairs

输出:

[fizz:true, buzz:false, bupo:yes]

答案 2 :(得分:0)

这并不是特别神奇,但它确实起到了作用。您可以在Groovy控制台中运行它。

String[] keys = ['fizz', 'buzz', 'bupo']
String[] values = ['true', 'false', 'yes']

Map<String, String> result = [:]

keys.eachWithIndex { key, index ->
  result[key] = values[index]
}

// show the result
println result

除了

用于创建数组的语法在Groovy(或Java)

中无效
String[] keys = { 'fizz', 'buzz', 'bupo' }