Quelle est la bonne façon d’obtenir un sous-tableau à Scala?

J’essaie d’obtenir un sous-tableau en scala, et je suis un peu confus quant à la manière de procéder. Ce que je voudrais le plus, c’est quelque chose comme comment faire en python:

x = [3, 2, 1] x[0:2] 

mais je suis assez certain que vous ne pouvez pas le faire.

La méthode la plus évidente consiste à utiliser la bibliothèque Java Arrays util.

 import java.util.Arrays val start = Array(1, 2, 3) Arrays.copyOfRange(start, 0, 2) 

Mais cela me rend toujours un peu sale d’utiliser les bibliothèques Java de Scala. Le moyen le plus “scala” que j’ai trouvé pour le faire serait

 def main(args: List[Ssortingng]) { 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?

Vous pouvez appeler la méthode slice:

 scala> Array("foo", "hoo", "goo", "ioo", "joo").slice(1, 4) res6: Array[java.lang.Ssortingng] = Array(hoo, goo, ioo) 

Cela fonctionne comme en python.

Imaginez que vous avez un tableau avec des éléments de a à f

 scala> val array = ('a' to 'f').toArray // Array('a','b','c','d','e','f') 

Ensuite, vous pouvez extraire un sous-tableau de différentes manières:

  1. Suppression des premiers n premiers éléments avec drop(n: Int)

    array.drop(2) // Array('c','d','e','f')

  2. Prenez les n premiers éléments avec take(n: Int)

    array.take(4) // Array('a','b','c','d')

  3. Sélectionnez un intervalle d’éléments avec une slice(from: Int, until: Int) . Notez que until est exclu.

    array.slice(2,4) // Array('c','d')

    La méthode de tranche est ssortingctement équivalente à:
    array.take(4).drop(2) // Array('c','d')

  4. Exclure les n derniers éléments avec dropRight(n: Int) :

    array.dropRight(4) // Array('a','b')

  5. Sélectionnez les n derniers éléments avec takeRight(n: Int) :

    array.takeRight(4) // Array('c','d','e','f')

Référence : documentation officielle