Estou tentando obter um subarray em scala e estou um pouco confuso sobre qual é a maneira correta de fazer isso. O que eu mais gostaria seria algo como você pode fazer isso em python:
x = [3, 2, 1]
x[0:2]
mas estou quase certo de que você não pode fazer isso.
A maneira mais óbvia de fazer isso seria usar a biblioteca de utilitários Java Arrays.
import java.util.Arrays
val start = Array(1, 2, 3)
Arrays.copyOfRange(start, 0, 2)
Mas sempre me sinto um pouco sujo usar bibliotecas Java no Scala. A maneira mais "escalonada" que encontrei de fazer isso seria
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
}
mas existe uma maneira melhor?
scala
scala-collections
nnythm
fonte
fonte
:
.Imagine que você tem uma matriz com elementos de
a
af
Em seguida, você pode extrair uma submatriz de maneiras diferentes:
Eliminando os primeiros n primeiros elementos com
drop(n: Int)
array.drop(2) // Array('c','d','e','f')
Pegue os primeiros n elementos com
take(n: Int)
array.take(4) // Array('a','b','c','d')
Selecione qualquer intervalo de elementos com
slice(from: Int, until: Int)
. Observe queuntil
está excluído.array.slice(2,4) // Array('c','d')
O método de fatia é estritamente equivalente a:
array.take(4).drop(2) // Array('c','d')
Exclua os últimos n elementos com
dropRight(n: Int)
:array.dropRight(4) // Array('a','b')
Selecione os últimos n elementos com
takeRight(n: Int)
:array.takeRight(4) // Array('c','d','e','f')
Referência : documentação oficial
fonte
Um exemplo de extração de colunas específicas de um 2D Scala Array (original_array):
fonte