Ответ 1
Каждый стандартный класс коллекции имеет сопутствующий объект с заводскими методами, включая fill
. Например:
Vector.fill(3, 3)( 0 )
См. A):CC[CC[A]]#fill[A](n1:Int,n2:Int)(elem:=>A):CC[CC[A]] rel=noreferrer>Соответствующий scaladoc.
Я хочу работать с неизменным индексированным многомерным массивом. Структура, которая имеет смысл, представляет собой Vector
Vector
s.
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
для неизменяемых объектов? Если нет, почему бы и нет?
Каждый стандартный класс коллекции имеет сопутствующий объект с заводскими методами, включая fill
. Например:
Vector.fill(3, 3)( 0 )
См. A):CC[CC[A]]#fill[A](n1:Int,n2:Int)(elem:=>A):CC[CC[A]] rel=noreferrer>Соответствующий scaladoc.
Существует метод создания, называемый tabulate
который позволяет вам устанавливать содержимое на основе индекса:
scala> Vector.tabulate(3,3){ (i,j) => 3*i+j+1 }
res0: scala.collection.immutable.Vector[scala.collection.immutable.Vector[Int]] =
Vector(Vector(1, 2, 3), Vector(4, 5, 6), Vector(7, 8, 9))
Если вам просто нужно нули (или какой - либо другой постоянной), вы можете использовать fill
вместо:
scala> Vector.fill(3,3)(0)
res1: scala.collection.immutable.Vector[scala.collection.immutable.Vector[Int]] =
Vector(Vector(0, 0, 0), Vector(0, 0, 0), Vector(0, 0, 0))
Вы можете использовать fill
:
scala> Vector.fill( 3 )( Vector.fill(3)(0) )
res1: scala.collection.immutable.Vector[scala.collection.immutable.Vector[Int]] =
Vector(Vector(0, 0, 0), Vector(0, 0, 0), Vector(0, 0, 0))