我用Scala在函数式编程中创建isolation board game。
所以很明显,我需要一块2D板。问题是我不知道我应该使用什么:一个数组的数组(它是可变的)还是一个列表的列表(不可变的),因为我知道我想要一个Any类型。我看到我们可以用val board = Array.ofDim[Any](rows, cols)得到一个定义的维数和类型的数组。我在列表中找不到任何类似的东西。然而,在函数式编程中,使用不可变集合不是更好吗?
有什么建议吗?
发布于 2019-11-26 01:34:58
在scala列表中-是一个链表数据结构。从概念上讲,你不知道某些列表的内容。在函数式编程中,您不应该将变量用作内存中的命名单元。您应该使用函数来获取所需的内容。因此,您可以使用所需容量的默认值来定义list,但您可以使用fill in List方法:
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:
val board: ArraySeq[ArraySeq[Boolean]] = ArraySeq((0 to rows).map(_ => ArraySeq((0 to cols).map(_ => false):_*)):_*)或者像list中的一样的fill函数:
val board: ArraySeq[ArraySeq[Boolean]] = ArraySeq.fill(rows)(ArraySeq.fill(cols)(false))https://stackoverflow.com/questions/59037053
复制相似问题