不変のインデックス付き多次元配列で作業したい。意味をなす構造は、Vector
がVector
である。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))
ちょうどあなたが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))
しかし、Vector.ofDim
という機能はなく、同等のものは見つかりません。
不変オブジェクトの場合はArray.ofDim
に相当しますか?そうでない場合は、どうしてですか?
数独パズルを解くプログラム用です。部分解は 'Option [Int]'のnxn配列として表されます。部分的な解_p_が与えられた場合、プログラムは整数を配列に入れて別の仮説を仮定することができます。各_p_は複数の_p'_を生成する可能性があるので、私は部分的な解決法を不変にしたい。私の選択肢は、1)プライベートの「配列」で数字を表現すること2)「ベクトル」で数字を表現することのいずれかになります。 (2)は機能的なスタイルのようですが、VectorのVectorを作成するのは厄介です。 –
単一次元を使用して多次元配列/リストを表すことができます。 – pedrofurla
多次元ベクトルのセルを更新しようとするのを楽しみましょう。おそらく最も簡単なのはユーティリティメソッドを持つことです: 'def update [T](v:Vector [Vector])(c1:Int、c2:int)(newVal:T)= v.updated(c1、v(c1 ).updated(c2、newVal)) '。または、より高次元のコピーと貼り付けが必要な場合はhttp://stackoverflow.com/a/12612908/770361から。 –