假设我们有两个List,分别是a和b,a和b的长度相同,现在我们想把a的每个元素作为key,b中对应的元素作为value,构造一个Map,应该怎么写呢?
最直接的想法,先建立一个空的Map,然后往里面添加key-value对,代码如下(运用了我在[url]http://johnnyjian.iteye.com/blog/271554[/url]中提到的同时迭代多个List的技巧):
但是,其实我们可以通过inject方法,把代码缩减为一行:
以上代码在Groovy 1.6.4下测试通过。
最直接的想法,先建立一个空的Map,然后往里面添加key-value对,代码如下(运用了我在[url]http://johnnyjian.iteye.com/blog/271554[/url]中提到的同时迭代多个List的技巧):
def a = [1, 2, 3]
def b = [4, 5, 6]
def m = [:]
[a, b].transpose().each { k, v -> m += [(k): v] }
assert m == [1: 4, 2: 5, 3: 6]
但是,其实我们可以通过inject方法,把代码缩减为一行:
def m = [a, b].transpose().inject([:]) { s, l -> s + [(l[0]): l[1]] }
assert m == [1: 4, 2: 5, 3: 6]
以上代码在Groovy 1.6.4下测试通过。