首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有限范围的Scala LazyList

有限范围的Scala LazyList
EN

Stack Overflow用户
提问于 2020-03-01 08:19:10
回答 1查看 490关注 0票数 2

我一直在尝试创建一系列项的LazyList,在本例中为块,这些项必须以类似于3维数组的方式进行访问。

代码语言:javascript
复制
  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时有用的范围?

就像这样

代码语言:javascript
复制
for {
  x <- min.x to max.x
  y <- min.y to max.y
  z <- min.z to max.z
} yield (x, y, z)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-01 08:48:40

像这样的东西?

代码语言:javascript
复制
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即可。结果类型将紧随其后。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60470877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档