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

Groovy学习笔记——同时迭代多个List

阅读更多
假设我们有这样两个List:
def list1 = [1, 2, 3]
def list2 = [4, 5, 6]

我们需要检查是否第二个List的每个元素都比第一个List的对应元素大,最直接的想法是,迭代第一个List,然后通过下标访问第二个List:
def result = true
list1.eachWithIndex { n, i ->
    if (n >= list2[i]) result = false
}
assert result

然而,这种方法不够直观,而且无法利用GDK本身提供的every方法。
实际上,我们可以利用Collection.transpose()方法来实现:
assert [list1, list2].transpose().every { a, b ->
    a < b
}

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], [2, 5, 8], [3, 6, 9]] == [list1, list2, list3].transpose()

有一点需要注意的是,如果List的长度不一,则取最短的长度:
def list4 = [1, 1, 1]
def list5 = [2, 2]
assert [[1, 2], [1, 2]] == [list4, list5].transpose()

以上代码在Groovy 1.5.7下测试通过。
分享到:
评论
1 楼 xbcoil 2009-10-14  
太简单了。。看不懂

相关推荐

    Groovy学习笔记.pdf

    ### Groovy学习笔记知识点概述 #### 一、Groovy简介及特性 **1.1 Groovy的概念** Groovy是一种强大的编程语言,它结合了Python、Ruby等动态语言的特点,同时与Java平台高度集成,旨在为Java开发者提供一种更加灵活...

    Groovy学习笔记

    ### Groovy学习笔记知识点梳理 #### 一、Groovy简介 - **概念**:Groovy是一种灵活的脚本语言,其设计初衷是为了更好地服务于Java开发者。它具备许多现代动态语言的特点,比如Python和Ruby,同时又能够无缝地与Java...

    groovy学习笔记

    以下是对Groovy学习笔记各章节的详细解释: ### 第1章:数字和字符串 在Groovy中,所有的数字都是Object类型的,这意味着你可以在对象上调用方法。例如,你可以直接在数字上使用加减乘除等运算符,如`12 + 8`。...

    Groovy学习笔记(适合入门者)

    ### Groovy学习笔记知识点梳理 #### 一、Groovy简介 **1.1 概念** Groovy是一种灵活且功能强大的编程语言,它与Java平台紧密结合,具备诸如Python和Ruby等动态语言的特点。该语言的设计初衷是为Java开发者提供一...

    scala的操作笔记

    ### Scala的操作笔记 #### 一、课程目标与学习路径 本课程旨在通过三个阶段的目标来逐步深入学习Scala语言,最终能够灵活运用Scala进行Spark程序的开发,并具备阅读Spark内核源码的能力。 - **初级目标**:掌握...

Global site tag (gtag.js) - Google Analytics