Groovy - 获取多维数组中的第一个元素

时间:2011-11-07 18:56:26

标签: groovy

我有一个常见的清单清单,即

list = [[2, 0, 1], [1, 5, 2], [1, 0, 3]]

我想获得每个数组的第一个元素的子集

sublist = [2, 1, 1]

我知道我可以循环遍历并获取第一个元素并添加,但我试图避免这个,因为我有一大堆值。我正试图避免这种解决方案

def sublist = []
list.each {
  sublist.add(it[0])
}

感谢。

3 个答案:

答案 0 :(得分:4)

更易阅读的版本:

list*.first()

答案 1 :(得分:2)

你可以尝试:

list.collect { it[0] }

虽然这仍然涉及迭代(尽管有些隐藏)。但是,任何解决方案都可能涉及到某个地方的迭代,无论是由您编写还是您调用的库/ API方法。

答案 2 :(得分:1)

如果您担心复制数据,更好的方法可能是创建自定义迭代器,而不是将数据复制到另一个列表中。如果您只需要遍历子列表一次,这是一个很好的方法。此外,如果您不遍历子列表的末尾,则不会浪费任何从未处理过的元素。例如:

bigList =  [[2, 0, 1], [1, 5, 2], [1, 0, 3]]

bigListIter = bigList.iterator()
firstOnlyIter = [
    hasNext: { -> bigListIter.hasNext() },
    next: { -> bigListIter.next().first() }
] as Iterator

for (it in firstOnlyIter) {
    println it
}

您始终可以将迭代器重新转换为包含Iterator.toList()的列表。