首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Scala进行函数式编程时,2D电路板使用的是什么

使用Scala进行函数式编程时,2D电路板使用的是什么
EN

Stack Overflow用户
提问于 2019-11-26 01:21:16
回答 1查看 138关注 0票数 2

我用Scala在函数式编程中创建isolation board game

所以很明显,我需要一块2D板。问题是我不知道我应该使用什么:一个数组的数组(它是可变的)还是一个列表的列表(不可变的),因为我知道我想要一个Any类型。我看到我们可以用val board = Array.ofDim[Any](rows, cols)得到一个定义的维数和类型的数组。我在列表中找不到任何类似的东西。然而,在函数式编程中,使用不可变集合不是更好吗?

有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2019-11-26 01:34:58

在scala列表中-是一个链表数据结构。从概念上讲,你不知道某些列表的内容。在函数式编程中,您不应该将变量用作内存中的命名单元。您应该使用函数来获取所需的内容。因此,您可以使用所需容量的默认值来定义list,但您可以使用fill in List方法:

代码语言:javascript
复制
val board = List.fill(rows)(List.fill(cols)('${default_value}'))

default_value替换为某个值。电路板的类型为List[List[default_value_type]]

或者,您可以使用Vector[VectorT]作为板卡。向量是一种不变的数据结构,可以通过索引函数进行随机访问和更新。看看apply()update() - functions。

对于ArraySeq,您可以使用以下值创建ArraySeqs的ArraySeq:

代码语言:javascript
复制
val board: ArraySeq[ArraySeq[Boolean]] = ArraySeq((0 to rows).map(_ => ArraySeq((0 to cols).map(_ => false):_*)):_*)

或者像list中的一样的fill函数:

代码语言:javascript
复制
val board: ArraySeq[ArraySeq[Boolean]] = ArraySeq.fill(rows)(ArraySeq.fill(cols)(false))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59037053

复制
相关文章

相似问题

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