Saya mencoba untuk mendapatkan subarray dalam skala, dan saya sedikit bingung tentang cara yang tepat untuk melakukannya. Yang paling saya inginkan adalah sesuatu seperti bagaimana Anda bisa melakukannya dengan python:
x = [3, 2, 1]
x[0:2]
tetapi saya cukup yakin Anda tidak dapat melakukan ini.
Cara paling jelas untuk melakukannya adalah dengan menggunakan pustaka util Java Array.
import java.util.Arrays
val start = Array(1, 2, 3)
Arrays.copyOfRange(start, 0, 2)
Tapi selalu membuat saya merasa sedikit kotor menggunakan perpustakaan Java di Scala. Cara paling "scalaic" yang saya temukan untuk melakukannya adalah
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
}
tetapi apakah ada cara yang lebih baik?
scala
scala-collections
nnythm
sumber
sumber
:
juga.Bayangkan Anda memiliki array dengan elemen dari
a
hinggaf
Kemudian Anda dapat mengekstrak sub-larik darinya dengan berbagai cara:
Menjatuhkan n elemen pertama dengan
drop(n: Int)
array.drop(2) // Array('c','d','e','f')
Ambil n elemen pertama dengan
take(n: Int)
array.take(4) // Array('a','b','c','d')
Pilih setiap interval elemen dengan
slice(from: Int, until: Int)
. Catatan yanguntil
dikecualikan.array.slice(2,4) // Array('c','d')
Metode slice sama persis dengan:
array.take(4).drop(2) // Array('c','d')
Kecualikan n elemen terakhir dengan
dropRight(n: Int)
:array.dropRight(4) // Array('a','b')
Pilih n elemen terakhir dengan
takeRight(n: Int)
:array.takeRight(4) // Array('c','d','e','f')
Referensi : Dokumentasi resmi
sumber
Contoh mengekstrak kolom tertentu dari 2D Scala Array (original_array):
sumber