Chcę pracować z niezmienną indeksowaną tablicą wielowymiarową. Struktura mająca sens to Vector
s. Vector
.Jak tworzyć wielowymiarowe wektory w Scali?
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))
Byłoby miło, aby utworzyć pustą tablicę przez podanie wymiarów, jak można z 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))
Jednak nie ma Vector.ofDim
, funkcja, i nie mogę znaleźć odpowiednika.
Czy istnieje odpowiednik Array.ofDim
dla obiektów niezmiennych? Jeśli nie, dlaczego nie?
Jest to program, który rozwiązuje łamigłówki Sudoku. Częściowe rozwiązanie jest reprezentowane jako tablica nxn z 'Option [Int]'. Biorąc pod uwagę częściowe rozwiązanie _p_, program może postawić hipotezę innego _p'_ poprzez wprowadzenie liczb całkowitych do tablicy. Ponieważ każde _p_ może generować wiele _p'_s, chcę aby każde częściowe rozwiązanie było niezmienne. Moje opcje wydają się być 1) reprezentują liczby z prywatnym 'Tablicą' 2) reprezentują liczby z' Vector'. (2) wydaje się bardziej w stylu funkcjonalnym, ale tworzenie 'Vector's' Vector's jest niezręczne. –
Możesz reprezentować wielowymiarowe tablice/listy używając pojedynczych wymiarów. – pedrofurla
Przygotuj się na zabawę, próbując zaktualizować komórki w wielowymiarowym wektorze. Prawdopodobnie najłatwiej jest mieć metodę użyteczności: 'def update [T] (v: Vector [Vector [T]]) (c1: Int, c2: Int) (newVal: T) = v.updated (c1, v (c1) .aktualizowane (c2, nowaWartość)) '. Lub jeśli potrzebujesz wyższych wymiarów, skopiuj i wklej z http://stackoverflow.com/a/12612908/770361. –