我有一个Grid
类,它是Cell
对象的2D数组包装器。我希望这个类实现Iterable<Cell>
接口,以便在循环中使用它并直接遍历所有单元格。有没有简单的方法来做到这一点?Kotlin是否支持yield return
样式的迭代器?我的当前解决方案相当冗长:
override fun iterator() = object : Iterator<Cell> {
val currentOuter = grid.iterator() // grid is object of Array<Array<Cell>>
var currentInner = if (currentOuter.hasNext()) currentOuter.next().iterator() else arrayOf<Cell>().iterator()
override fun next(): Cell {
if (!hasNext()) {
throw NoSuchElementException()
}
return if (currentInner.hasNext()) {
currentInner.next()
} else {
currentInner = currentOuter.next().iterator()
currentInner.next()
}
}
override fun hasNext(): Boolean {
return currentInner.hasNext() || currentOuter.hasNext()
}
}