Scala:在索引上向 ArrayBuffer 添加元素
Scala: adding element to ArrayBuffer on index
我刚开始学习 Scala,尝试编写一个简单的游戏来学习它的语法和一些基本规则。如果有人能帮我解决一个简单的问题,我将不胜感激。我创建了充满“.”的简单板。现在我想换一个“.”在某个索引上并放在那里 "X"。在 java 中,它看起来像这样:
board[col][row] = symbol;
这是电路板部分:
val board = {
collection.mutable.ArrayBuffer[String]()
collection.mutable.ArrayBuffer.fill(cols, rows)(".")
}
def show(): Unit = {
board.foreach(x => println(x.mkString))
}
def setField(col:Int, row:Int, fieldSymbol:String): Unit = {
//fieldSymbol on index, which is (col*row) as it's 1d array
//thought board.apply(col*row): fieldSymbol might work but it's not
//correct I guess
}
如有任何帮助,我们将不胜感激。在此先感谢您的建议。
您可以像这样为平面数组实现 setField
def setField(c: Int, r: Int, v: String) {
board(c * rows + row) = v
}
然而,如果您想将多维数据存储在单个数组中,这只是一个好主意(如果您关心分配结构和类似的东西,这可能会很有趣)。在这种情况下,我建议编写一个通用方法 setField。
如果你想要数组的数组,fill 已经给了你
val board = ArrayBuffer.fill(rows, cols)(".")
然后像这样更新
board(x)(y) = "something"
然而,您应该问问自己是否真的需要可变数据结构,并且您的程序不能使用不可变数据结构来更优雅地表达。而且,如果你真的想要一个二维向量,如果你想将某物表示为一个对象板,特别是如果大部分板是 "empty"。使用地图可能会更优雅:
val board = Map[(Int, Int), String]() // empty board
val nextBoard = bord + ((2,3) -> "something")
我刚开始学习 Scala,尝试编写一个简单的游戏来学习它的语法和一些基本规则。如果有人能帮我解决一个简单的问题,我将不胜感激。我创建了充满“.”的简单板。现在我想换一个“.”在某个索引上并放在那里 "X"。在 java 中,它看起来像这样:
board[col][row] = symbol;
这是电路板部分:
val board = {
collection.mutable.ArrayBuffer[String]()
collection.mutable.ArrayBuffer.fill(cols, rows)(".")
}
def show(): Unit = {
board.foreach(x => println(x.mkString))
}
def setField(col:Int, row:Int, fieldSymbol:String): Unit = {
//fieldSymbol on index, which is (col*row) as it's 1d array
//thought board.apply(col*row): fieldSymbol might work but it's not
//correct I guess
}
如有任何帮助,我们将不胜感激。在此先感谢您的建议。
您可以像这样为平面数组实现 setField
def setField(c: Int, r: Int, v: String) {
board(c * rows + row) = v
}
然而,如果您想将多维数据存储在单个数组中,这只是一个好主意(如果您关心分配结构和类似的东西,这可能会很有趣)。在这种情况下,我建议编写一个通用方法 setField。
如果你想要数组的数组,fill 已经给了你
val board = ArrayBuffer.fill(rows, cols)(".")
然后像这样更新
board(x)(y) = "something"
然而,您应该问问自己是否真的需要可变数据结构,并且您的程序不能使用不可变数据结构来更优雅地表达。而且,如果你真的想要一个二维向量,如果你想将某物表示为一个对象板,特别是如果大部分板是 "empty"。使用地图可能会更优雅:
val board = Map[(Int, Int), String]() // empty board
val nextBoard = bord + ((2,3) -> "something")