Я пытаюсь получить подмассив в scala, и я немного не понимаю, как это сделать правильно. Больше всего мне хотелось бы, чтобы это было похоже на то, как это можно сделать в python:
x = [3, 2, 1]
x[0:2]
но я совершенно уверен, что вы не можете этого сделать.
Наиболее очевидный способ сделать это - использовать служебную библиотеку Java Arrays.
import java.util.Arrays
val start = Array(1, 2, 3)
Arrays.copyOfRange(start, 0, 2)
Но использование библиотек Java в Scala всегда заставляет меня чувствовать себя немного грязно. Самый "скалайский" способ, который я нашел для этого, был бы
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
}
но есть ли способ лучше?
scala
scala-collections
nnythm
источник
источник
:
нет.Представьте, что у вас есть массив с элементами от
a
доf
scala> val array = ('a' to 'f').toArray // Array('a','b','c','d','e','f')
Затем вы можете извлечь из него подмассив разными способами:
Удаление первых n первых элементов с помощью
drop(n: Int)
array.drop(2) // Array('c','d','e','f')
Возьмите первые n элементов с
take(n: Int)
array.take(4) // Array('a','b','c','d')
Выберите любой интервал элементов с помощью
slice(from: Int, until: Int)
. Обратите внимание, чтоuntil
это исключено.array.slice(2,4) // Array('c','d')
Метод среза строго эквивалентен:
array.take(4).drop(2) // Array('c','d')
Исключить последние n элементов с помощью
dropRight(n: Int)
:array.dropRight(4) // Array('a','b')
Выберите последние n элементов с помощью
takeRight(n: Int)
:array.takeRight(4) // Array('c','d','e','f')
Ссылка : Официальная документация
источник
Пример извлечения определенных столбцов из массива 2D Scala (original_array):
import scala.collection.mutable.ArrayBuffer val sub_array = ArrayBuffer[Array[String]]() val columns_subset: Seq[String] = Seq("ColumnA", "ColumnB", "ColumnC") val columns_original = original_array(0) for (column_now <- columns_subset) { sub_array += original_array.map{_(columns_original.indexOf(column_now))} } sub_array
источник