Voglio lavorare con un array multidimensionale indicizzato immutabile. La struttura che ha senso è un Vector
di Vector
s.Come si creano vettori multidimensionali in 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))
Sarebbe bello creare una matrice vuota semplicemente specificando le dimensioni, come si può 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))
Tuttavia, non v'è alcuna Vector.ofDim
, la funzione, e non riesco a trovare un equivalente.
Esiste un equivalente di Array.ofDim
per oggetti immutabili? Se no, perché no?
È per un programma che risolve i puzzle di Sudoku. Una soluzione parziale è rappresentata come un array nxn di 'Option [Int]'. Data una soluzione parziale _p_, il programma può ipotizzare un altro _p'_ inserendo numeri interi nell'array. Poiché ogni _p_ può generare più _p'_ s, voglio che ogni soluzione parziale sia immutabile. Le mie opzioni sembrano essere 1) rappresentare i numeri con una 'matrice 'privata 2) rappresentano i numeri con un' Vector'. (2) sembra più nello stile funzionale, ma creare 'Vector's di' Vector's è scomodo. –
È possibile rappresentare matrici/elenchi multidimensionali utilizzando singole dimensioni. – pedrofurla
Preparati a divertirti cercando di aggiornare le celle in un vettore multidimensionale. Probabilmente è più semplice avere un metodo di utilità: 'def update [T] (v: Vector [Vector [T]]) (c1: Int, c2: Int) (newVal: T) = v.updated (c1, v (c1) .updated (c2, newVal)) '. Oppure se hai bisogno di dimensioni superiori, copia e incolla da http://stackoverflow.com/a/12612908/770361. –