J'essaie d'obtenir un sous-tableau dans scala, et je ne sais pas trop quelle est la bonne façon de le faire. Ce que je voudrais le plus serait quelque chose comme comment vous pouvez le faire en python:
x = [3, 2, 1]
x[0:2]
mais je suis assez certain que vous ne pouvez pas faire cela.
La manière la plus évidente de le faire serait d'utiliser la bibliothèque utilitaire Java Arrays.
import java.util.Arrays
val start = Array(1, 2, 3)
Arrays.copyOfRange(start, 0, 2)
Mais cela me fait toujours me sentir un peu sale d'utiliser les bibliothèques Java dans Scala. La manière la plus "scalaïque" que j'ai trouvée pour le faire serait
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
}
Mais y a-t-il une meilleure façon?
scala
scala-collections
nnythm
la source
la source
:
.Imaginez que vous ayez un tableau avec des éléments de
a
àf
Ensuite, vous pouvez en extraire un sous-tableau de différentes manières:
Déposer les n premiers éléments avec
drop(n: Int)
array.drop(2) // Array('c','d','e','f')
Prenez les n premiers éléments avec
take(n: Int)
array.take(4) // Array('a','b','c','d')
Sélectionnez n'importe quel intervalle d'éléments avec
slice(from: Int, until: Int)
. Notez queuntil
c'est exclu.array.slice(2,4) // Array('c','d')
La méthode slice est strictement équivalente à:
array.take(4).drop(2) // Array('c','d')
Excluez les n derniers éléments avec
dropRight(n: Int)
:array.dropRight(4) // Array('a','b')
Sélectionnez les n derniers éléments avec
takeRight(n: Int)
:array.takeRight(4) // Array('c','d','e','f')
Référence : documentation officielle
la source
Un exemple d'extraction de colonnes spécifiques d'un tableau Scala 2D (original_array):
la source