【Groovy】List对象的transpose和inject方法的使用

【Groovy】List对象的transpose和inject方法的使用,第1张

概述transpose()方法实际上就是数学中矩阵的转置,简单的来说就是行和列的交换:  assert [[1, 4], [2, 5], [3, 6]] == [list1, list2].transpose() transpose()不止可以用于两个List,还能用于多个List。譬如,我们有第三个List:  def list3 = [7, 8, 9] 我们可以这样检查是否满足“list3 > l

transpose()方法实际上就是数学中矩阵的转置,简单的来说就是行和列的交换: 

assert [[1,4],[2,5],[3,6]] == [List1,List2].transpose() 

transpose()不止可以用于两个List,还能用于多个List。譬如,我们有第三个List: 

def List3 = [7,8,9]

我们可以这样检查是否满足“List3 > List2 > List1”(每个对应的元素): 

assert [List1,List2,List3].transpose().every { a,b,c ->    a < b && b < c}assert [[1,4,7],5,8],6,9]] == [List1,List3].transpose()

有一点需要注意的是,如果List的长度不一,则取最短的长度: 

def List4 = [1,1,1]def List5 = [2,2]assert [[1,2],[1,2]] == [List4,List5].transpose()

inject()方法遍历集合,第一次将传递的值和集合项目传给闭包,将处理结果作为传递的值,和下一个集合项目传给闭包,依此类推

def List = [1,2,3]result = List.inject(0){s,l -> s += l }assert 6 == result

def List = ['like','groovy']result = List.inject('I'){s,l -> "$s $l" }assert "I like groovy" == result

两个方法 结合使用举例,假设我们有两个List,分别是a和b,a和b的长度相同,现在我们想把a的每个元素作为key,b中对应的元素作为value,构造一个Map
def a = [1,3]def b = [4,6]def m = [a,b].transpose().inject([:]) { s,l -> s + [(l[0]): l[1]] }assert m == [1: 4,2: 5,3: 6]
总结

以上是内存溢出为你收集整理的【Groovy】List对象的transpose和inject方法的使用全部内容,希望文章能够帮你解决【Groovy】List对象的transpose和inject方法的使用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1266910.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存