Groovy学习笔记——同时迭代多个List
来源:互联网 发布:免费手机短信群发软件 编辑:程序博客网 时间:2024/06/05 08:41
转自:http://johnnyjian.iteye.com/blog/271554
假设我们有这样两个List:
我们需要检查是否第二个List的每个元素都比第一个List的对应元素大,最直接的想法是,迭代第一个List,然后通过下标访问第二个List:
然而,这种方法不够直观,而且无法利用GDK本身提供的every方法。
实际上,我们可以利用Collection.transpose()方法来实现:
transpose()方法实际上就是数学中矩阵的转置,简单的来说就是行和列的交换:
transpose()不止可以用于两个List,还能用于多个List。譬如,我们有第三个List:
我们可以这样检查是否满足“list3 > list2 > list1”(每个对应的元素):
有一点需要注意的是,如果List的长度不一,则取最短的长度:
以上代码在Groovy 1.5.7下测试通过。
- 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下测试通过。
- Groovy学习笔记——同时迭代多个List
- grails学习笔记——Groovy与java的比较
- Groovy学习笔记——用inject方法构造Map
- groovy学习笔记1
- Groovy学习笔记(1)
- Groovy学习笔记
- Groovy 学习笔记 (一)
- Groovy 学习笔记 (二)
- Groovy 学习笔记 (三)
- Groovy学习笔记-Groovlets
- Groovy 学习笔记
- Groovy学习笔记-基础
- groovy学习笔记
- groovy 学习笔记
- Groovy学习笔记
- groovy学习笔记
- 1groovy学习笔记
- groovy学习笔记
- 蓝牙技术
- ps怎么把图层置入图层,就像cdr的置入容器一样。如图有个向下的小箭头的
- as3与php交互实现总结
- Oracle 启动关闭常见问题与解决方案
- Mule Tuning Performance Mule性能调优
- Groovy学习笔记——同时迭代多个List
- 学习资料收集(持续更新中)
- SJ9012: IE6 IE7 IE8(Q) 不支持 JSON 对象
- WiEngine引擎学习笔记-2 AnimationTest列子翻译
- java split()用法
- Python socket编程
- 使用jQuery清空file文件域的解决方案
- delphi 小知识(留着以后复习)
- 数据结构--单链表“环"的问题(2)