Estoy tratando de obtener un subarreglo en scala, y estoy un poco confundido sobre cuál es la forma correcta de hacerlo. Lo que más me gustaría sería algo como cómo puedes hacerlo en Python:
x = [3, 2, 1]
x[0:2]
pero estoy bastante seguro de que no puede hacer esto.
La forma más obvia de hacerlo sería utilizar la biblioteca de utilidades Java Arrays.
import java.util.Arrays
val start = Array(1, 2, 3)
Arrays.copyOfRange(start, 0, 2)
Pero siempre me hace sentir un poco sucio usar bibliotecas Java en Scala. La forma más "escalada" que encontré de hacerlo sería
def main(args: List[String]) {
val start = Array(1, 2, 3)
arrayCopy(start, 0, 2)
}
def arrayCopy[A](arr: Array[A], start: Int, end: Int)(implicit manifest: Manifest[A]): Array[A] = {
val ret = new Array(end - start)
Array.copy(arr, start, ret, 0, end - start)
ret
}
¿Pero hay una manera mejor?
scala
scala-collections
nnythm
fuente
fuente
:
.Imagina que tienes una matriz con elementos de
a
af
Luego, puede extraer una submatriz de diferentes maneras:
Soltando los primeros n primeros elementos con
drop(n: Int)
array.drop(2) // Array('c','d','e','f')
Tome los primeros n elementos con
take(n: Int)
array.take(4) // Array('a','b','c','d')
Seleccione cualquier intervalo de elementos con
slice(from: Int, until: Int)
. Tenga en cuenta queuntil
está excluido.array.slice(2,4) // Array('c','d')
El método de corte es estrictamente equivalente a:
array.take(4).drop(2) // Array('c','d')
Excluya los últimos n elementos con
dropRight(n: Int)
:array.dropRight(4) // Array('a','b')
Seleccione los últimos n elementos con
takeRight(n: Int)
:array.takeRight(4) // Array('c','d','e','f')
Referencia : documentación oficial
fuente
Un ejemplo de extracción de columnas específicas de un Scala Array 2D (original_array):
fuente