vectores resueltos matrices ejercicios ejemplos ejemplo declarar crear como bidimensionales arreglos arrays scala append

arrays - resueltos - Scala: ¿cuál es la mejor manera de agregar un elemento a una matriz?



vectores en java ejemplos (3)

El más fácil podría ser:

Array(1, 2, 3) :+ 4

En realidad, Array puede transformarse de manera WrappedArray en una WrappedArray

Digamos que tengo una Array[Int] como

val array = Array( 1, 2, 3 )

Ahora me gustaría añadir un elemento a la matriz, digamos el valor 4 , como en el siguiente ejemplo:

val array2 = array + 4 // will not compile

Por supuesto, System.arraycopy() usar System.arraycopy() y hacer esto por mí mismo, pero debe haber una función de biblioteca de Scala para esto, que simplemente no pude encontrar. Gracias por cualquier punteros!

Notas:

  1. Soy consciente de que puedo agregar otra matriz de elementos, como en la siguiente línea, pero parece demasiado redonda:

    val array2b = array ++ Array( 4 ) // this works

  2. Soy consciente de las ventajas y desventajas de List vs Array y aquí estoy por varias razones específicamente interesadas en extender una matriz.

Editar 1

Gracias por las respuestas que apuntan al método del operador :+ . Esto es lo que estaba buscando. Desafortunadamente, es bastante más lenta que una implementación de método de arraycopy personalizada () usando arraycopy - aproximadamente dos o tres veces más lento. Al SeqLike[] la implementación en SeqLike[] , se crea un constructor, luego se agrega la matriz, luego se realiza la adición mediante el constructor y luego se representa el constructor. No es una buena implementación para arreglos. Hice un punto de referencia rápido comparando los dos métodos, mirando el tiempo más rápido de cada diez ciclos. Hacer 10 millones de repeticiones de un solo elemento se agrega a una instancia de matriz de 8 elementos de alguna clase. Foo toma 3.1 segundos con :+ y 1.7 segundos con un método simple de append() que usa System.arraycopy(); haciendo 10 millones de repeticiones de anexos de un solo elemento en arreglos de 8 elementos de Largo toma 2.1 segundos con :+ y 0.78 segundos con el método simple de append() . Me pregunto si esto no se pudo solucionar en la biblioteca con una implementación personalizada para Array .

Editar 2

Por lo que vale, archivé un boleto: https://issues.scala-lang.org/browse/SI-5017


Puede usar :+ para agregar elemento a la matriz y +: para anteponerlo:

0 +: array :+ 4

debe producir:

res3: Array[Int] = Array(0, 1, 2, 3, 4)

Es lo mismo que con cualquier otra implementación de Seq .


val array2 = array :+ 4 //Array(1, 2, 3, 4)

Trabajos también "revertidos":

val array2 = 4 +: array Array(4, 1, 2, 3)

También hay una versión "en el lugar":

var array = Array( 1, 2, 3 ) array +:= 4 //Array(4, 1, 2, 3) array :+= 0 //Array(4, 1, 2, 3, 0)