繁体   English   中英

什么用于 Scala 函数式编程中的 2D 板

[英]What is used for a 2D board in functional programming with Scala

我正在使用 Scala 在函数式编程中创建隔离棋盘游戏
所以很明显我需要某种 2D 板。 问题是我不知道应该使用什么:知道我想要 Any 类型的数组数组(可变)或列表列表(不可变)。 我看到我们可以使用val board = Array.ofDim[Any](rows, cols)获得定义尺寸和类型的数组。 我在列表中找不到类似的东西。 但是,在函数式编程中,使用不可变集合不是更好吗?

有什么建议 ?

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

val board = List.fill(rows)(List.fill(cols)('${default_value}'))

在某个值上替换default_value 板的类型将为List[List[default_value_type]]

或者你可以使用 Vector[Vector[T]] 作为板。 Vector 是不可变的数据结构,通过索引函数随机访问和更新。 看看apply()update() - 函数。

对于 ArraySeq,您可以使用一些值创建 ArraySeq 的 ArraySeq:

val board: ArraySeq[ArraySeq[Boolean]] = ArraySeq((0 to rows).map(_ => ArraySeq((0 to cols).map(_ => false):_*)):_*)

或与列表相同的填充功能:

val board: ArraySeq[ArraySeq[Boolean]] = ArraySeq.fill(rows)(ArraySeq.fill(cols)(false))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM