Scala에서 하위 배열을 얻는 올바른 방법은 무엇입니까?
나는 스칼라에서 하위 배열을 얻으려고 노력하고 있는데 적절한 방법이 무엇인지에 대해 약간 혼란 스럽습니다. 내가 가장 원하는 것은 파이썬에서 어떻게 할 수 있는지와 같은 것입니다.
x = [3, 2, 1]
x[0:2]
하지만 나는 당신이 이것을 할 수 없다고 확신합니다.
이를 수행하는 가장 확실한 방법은 Java Arrays util 라이브러리를 사용하는 것입니다.
import java.util.Arrays
val start = Array(1, 2, 3)
Arrays.copyOfRange(start, 0, 2)
그러나 Scala에서 Java 라이브러리를 사용하는 것은 항상 나를 조금 더럽게 만듭니다. 내가 찾은 가장 "scalaic"방법은
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
}
하지만 더 좋은 방법이 있습니까?
slice 메서드를 호출 할 수 있습니다.
scala> Array("foo", "hoo", "goo", "ioo", "joo").slice(1, 4)
res6: Array[java.lang.String] = Array(hoo, goo, ioo)
파이썬 에서처럼 작동합니다.
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')
slice 메서드는 다음과 완전히 동일합니다.
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')
참조 : 공식 문서
참고 URL : https://stackoverflow.com/questions/10830944/what-is-the-correct-way-to-get-a-subarray-in-scala
'developer tip' 카테고리의 다른 글
C에서 구조체 배열을 어떻게 만드나요? (0) | 2020.09.12 |
---|---|
VBA의 해시 테이블 / 연관 배열 (0) | 2020.09.12 |
Django가 RuntimeError로 작동하지 않습니다 .Pulate () is n't reentrant (0) | 2020.09.12 |
리턴을 사용할 때 스위치를 중단해야합니까? (0) | 2020.09.12 |
C # : 정적 메서드가 여러 스레드에서 호출되면 어떻게됩니까? (0) | 2020.09.12 |