Quiero trabajar con una matriz multidimensional indexada e inmutable. La estructura que tiene sentido es Vector
de Vector
s.¿Cómo creo vectores multidimensionales en Scala?
scala> val v = Vector[Vector[Int]](Vector[Int](1,2,3), Vector[Int](4,5,6), Vector[Int](7,8,9))
v: scala.collection.immutable.Vector[Vector[Int]] = Vector(Vector(1, 2, 3), Vector(4, 5, 6), Vector(7, 8, 9))
Sería bueno para crear una matriz vacía simplemente especificando las dimensiones, como se hace con Array.ofDim
.
scala> a = Array.ofDim[Int](3,3)
a: Array[Array[Int]] = Array(Array(0, 0, 0), Array(0, 0, 0), Array(0, 0, 0))
Sin embargo, no hay Vector.ofDim
, función, y no puedo encontrar un equivalente.
¿Hay un equivalente de Array.ofDim
para objetos inmutables? ¿Si no, porque no?
Es para un programa que resuelve los rompecabezas de Sudoku. Una solución parcial se representa como una matriz nxn de 'Opción [Int]'. Dada una solución parcial _p_, el programa puede hipotetizar otra _p'_ poniendo enteros en la matriz. Como cada _p_ puede generar múltiples _p'_ s, quiero que cada solución parcial sea inmutable. Mis opciones parecen ser 1) representar los números con un 'Array' privado 2) representar los números con un' Vector'. (2) parece más en el estilo funcional, pero crear 'Vector's de' Vector's es incómodo. –
Puede representar matrices/listas multidimensionales utilizando dimensiones únicas. – pedrofurla
Prepárate para divertirte intentando actualizar las celdas en un Vector multidimensional. Probablemente lo más fácil es tener un método de utilidad: 'def update [T] (v: Vector [Vector [T]]) (c1: Int, c2: Int) (newVal: T) = v.updated (c1, v (c1)) .updated (c2, newVal)) '. O si necesita dimensiones superiores, copie y pegue desde http://stackoverflow.com/a/12612908/770361. –