gpt4 book ai didi

有限范围的 Scala LazyList

转载 作者:行者123 更新时间:2023-12-01 01:48:32 35 4
gpt4 key购买 nike

我一直在尝试创建一系列项目的 LazyList,在本例中为 block ,必须像时尚一样以 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)
}

列表的生成结果相当干净,但我觉得必须有更好的方法来按照与在 3 个嵌套 for 循环中相同的顺序递增 x、y 和 z 值(其中 min.x <= x <= max.x 等)。

在使用 LazyLists 时,是否有可以从 for 循环理解或范围中获取的页面?

有点像

for {
x <- min.x to max.x
y <- min.y to max.y
z <- min.z to max.z
} yield (x, y, z)

最佳答案

是这样的吗?

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。结果类型将随之而来。

关于有限范围的 Scala LazyList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60470877/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com