Ich versuche, ein Subarray in Scala zu bekommen, und ich bin ein wenig verwirrt darüber, wie es richtig gemacht wird. Was ich am liebsten hätte, wäre so etwas wie das in Python:
x = [3, 2, 1]
x[0:2]
aber ich bin ziemlich sicher, dass Sie dies nicht tun können.
Der naheliegendste Weg, dies zu tun, wäre die Verwendung der Java Arrays util-Bibliothek.
import java.util.Arrays
val start = Array(1, 2, 3)
Arrays.copyOfRange(start, 0, 2)
Aber es macht mich immer ein bisschen schmutzig, Java-Bibliotheken in Scala zu verwenden. Der "skalaischste" Weg, den ich gefunden habe, wäre
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
}
Aber gibt es einen besseren Weg?
scala
scala-collections
nnythm
quelle
quelle
:
.Stellen Sie sich vor, Sie haben ein Array mit Elementen von
a
bisf
Dann können Sie ein Sub-Array auf verschiedene Arten daraus extrahieren:
Löschen der ersten n ersten Elemente mit
drop(n: Int)
array.drop(2) // Array('c','d','e','f')
Nimm die ersten n Elemente mit
take(n: Int)
array.take(4) // Array('a','b','c','d')
Wählen Sie ein beliebiges Intervall von Elementen mit
slice(from: Int, until: Int)
. Beachten Sie, dass diesuntil
ausgeschlossen ist.array.slice(2,4) // Array('c','d')
Die Slice-Methode entspricht genau:
array.take(4).drop(2) // Array('c','d')
Schließen Sie die letzten n Elemente aus mit
dropRight(n: Int)
:array.dropRight(4) // Array('a','b')
Wählen Sie die letzten n Elemente aus mit
takeRight(n: Int)
:array.takeRight(4) // Array('c','d','e','f')
Referenz : Offizielle Dokumentation
quelle
Ein Beispiel für das Extrahieren bestimmter Spalten aus einem 2D-Scala-Array (original_array):
quelle