Общая матрица в Scala
Я пытаюсь создать общую матрицу в Scala, используя класс case. Я пишу здесь, потому что я был бы очень признателен за любые отзывы о моем решении от тех, кто имеет понимание.
case class Matrix[T](data: Vector[Vector[T]]){
def foreachRowCol(f: (Int, Int, T) => Unit): Unit =
for (r <- 0 until data.size) {
for (c <- 0 until data(r).size) {
f(r, c, data(r)(c))
}
}
def map[U](f: T => U): Matrix[U] = Matrix(data.map(_.map(f)))
/** What follows are my implementations. */
/** The element at row r and column c */
def apply(r: Int, c: Int): T = data(r)(c)
/** Gives Some[T](element) at row r and column c
* if r and c are within index bounds, else None
*/
def get(r: Int, c: Int): Option[T] =
val opt: Option[T] =
if (r < data.size - 1 && c < data(r).size - 1){
Some(data(r)(c)) else None
}
opt
/** The row vector of row r */
def row(r: Int): Vector[T] = data(r)
/** The column vector of column c */
def col(c: Int): Vector[T] =
for (i <- 0 until data.size - 1){
data(i)(c)
}
/** A new Matrix with element at row r and col c updated */
def updated(r: Int, c: Int, value: T): Matrix[T] = {
val newData = {
for (i <- 0 until data.size - 1){
for (j <- 0 until data(i).size - 1){
if (r == i && j == c){
data(r)(c) = value
}
}
}
}
Matrix[T](newData)
}
object Matrix {
def fill[T](rowSize: Int, colSize: Int)(init: T): Matrix[T] =
new Matrix(Vector.fill(rowSize)(Vector.fill(colSize)(init)))
}
У меня есть несколько вопросов:
- Я не могу понять значение первой функции foreachRowCol. Что означает функция, которая имеет тип функции (Int, Int, T) => Unit?
- Я думаю, что я сделал хорошо реализацию. Есть ли причина для меня, чтобы чувствовать, что это не так?
- Мое мышление об обновленном методе было примерно таким:
а) перебрать матрицу
б) заменить значение в данных (г)(в) на значение
c) вывести новую матрицу с элементом в строке r и col c, замененным значением.
Правильно ли мое мышление или я должен был реализовать это по-другому?