`
JohnnyJian
  • 浏览: 104318 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Groovy学习笔记——用inject方法构造Map

阅读更多
假设我们有两个List,分别是a和b,a和b的长度相同,现在我们想把a的每个元素作为key,b中对应的元素作为value,构造一个Map,应该怎么写呢?

最直接的想法,先建立一个空的Map,然后往里面添加key-value对,代码如下(运用了我在http://johnnyjian.iteye.com/blog/271554中提到的同时迭代多个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下测试通过。
分享到:
评论
3 楼 JohnnyJian 2010-12-23  
k不是什么下标,详细的话你还是看我另外一篇blog吧:http://johnnyjian.iteye.com/blog/271554

key232323 写道
第一个例子应该这么写吧

[a, b].transpose().each { v -> m += [(v[0]): v[1]] } 

和k(下标)没关系的。。。

2 楼 key232323 2010-12-23  
汗。。。二维List原来也可以each{k, v这么用。。。
1 楼 key232323 2010-12-23  
第一个例子应该这么写吧

[a, b].transpose().each { v -> m += [(v[0]): v[1]] } 

和k(下标)没关系的。。。

相关推荐

Global site tag (gtag.js) - Google Analytics