Groovy学习笔记——同时迭代多个List
假设我们有这样两个List:def list1 = def list2 =
我们需要检查是否第二个List的每个元素都比第一个List的对应元素大,最直接的想法是,迭代第一个List,然后通过下标访问第二个List:
def result = truelist1.eachWithIndex { n, i -> if (n >= list2) result = false}assert result
然而,这种方法不够直观,而且无法利用GDK本身提供的every方法。
实际上,我们可以利用Collection.transpose()方法来实现:
assert .transpose().every { a, b -> a < b}
transpose()方法实际上就是数学中矩阵的转置,简单的来说就是行和列的交换:
assert [, , ] == .transpose()
transpose()不止可以用于两个List,还能用于多个List。譬如,我们有第三个List:
def list3 =
我们可以这样检查是否满足“list3 > list2 > list1”(每个对应的元素):
assert .transpose().every { a, b, c -> a < b && b < c}assert [, , ] == .transpose()
有一点需要注意的是,如果List的长度不一,则取最短的长度:
def list4 = def list5 = assert [, ] == .transpose()
以上代码在Groovy 1.5.7下测试通过。
页:
[1]