我一直在尝试创建一系列项的LazyList,在本例中为块,这些项必须以类似于3维数组的方式进行访问。
def getBlocks: LazyList[Block] = getBlocks(min.x, min.y, min.z)
private def getBlocks(x: Int, y: Int, z: Int): LazyList[Block] = {
val (nextX, nextY, nextZ) = {
if (z == max.z) (x, y + 1, min.z)
else if (y == max.y) (x + 1, min.y, min.z)
else (x, y, z + 1)
}
if (y > max.y) LazyList.empty
else worldService.getBlock(world, x, y, z) #:: getBlocks(nextX, nextY, nextZ)
}列表的生成被证明是相当干净的,但我觉得必须有一种更好的方法来处理递增x、y和z值的方式,其顺序与嵌套在3个for循环中的顺序相同(其中min.x <= x <= max.x,等等)。
有没有一个页面可以用来理解循环,或者在使用LazyLists时有用的范围?
就像这样
for {
x <- min.x to max.x
y <- min.y to max.y
z <- min.z to max.z
} yield (x, y, z)发布于 2020-03-01 08:48:40
像这样的东西?
for {
x <- LazyList.range(min.x, max.x+1)
y <- LazyList.range(min.y, max.y+1)
z <- LazyList.range(min.z, max.z+1)
} yield (x, y, z)
//res0: LazyList[(Int, Int, Int)] = LazyList(<not computed>)实际上,您只需要将x生成器设置为LazyList即可。结果类型将紧随其后。
https://stackoverflow.com/questions/60470877
复制相似问题