我有一个常见的清单清单,即
list = [[2, 0, 1], [1, 5, 2], [1, 0, 3]]
我想获得每个数组的第一个元素的子集
sublist = [2, 1, 1]
我知道我可以循环遍历并获取第一个元素并添加,但我试图避免这个,因为我有一大堆值。我正试图避免这种解决方案
def sublist = []
list.each {
sublist.add(it[0])
}
感谢。
答案 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()
的列表。