말 나는이 Array[Int]
같은
val array = Array( 1, 2, 3 )
이제 4
다음 예제와 같이 값을 배열에 추가하고 싶습니다 .
val array2 = array + 4 // will not compile
물론 System.arraycopy()
이 작업을 직접 사용 하고 수행 할 수 있지만이를위한 Scala 라이브러리 함수가 있어야합니다. 단순히 찾을 수 없습니다. 어떤 조언을 해주셔서 감사합니다!
노트:
다음 줄과 같이 요소의 다른 배열을 추가 할 수 있지만 너무 둥글게 보입니다.
val array2b = array ++ Array( 4 ) // this works
나는 List vs Array의 장점과 단점을 알고 있으며 여기에서는 Array 확장에 특히 관심이있는 여러 가지 이유로 여기에 있습니다.
편집 1
:+
운영자 방법을 가리키는 답변에 감사드립니다 . 이것이 제가 찾던 것입니다. 안타깝게도 사용자 정의 append () 메서드 구현보다 속도가 느립니다 arraycopy
-약 2 ~ 3 배 느립니다. 에서 구현을 보면 SeqLike[]
빌더가 생성되고 배열이 추가 된 다음 빌더를 통해 추가가 완료된 다음 빌더가 렌더링됩니다. 배열에 대한 좋은 구현이 아닙니다. 두 가지 방법을 비교하는 빠른 벤치 마크를 수행하여 10주기 중 가장 빠른 시간을 확인했습니다. 어떤 클래스의 8 개 요소 배열 인스턴스에 단일 항목 추가를 1,000 만 번 반복하면 다음 을 사용 하는 간단한 방법으로 Foo
3.1 초 :+
, 1.7 초가 걸립니다.append()
System.arraycopy();
Long의 8 개 요소 배열에 대해 1,000 만 개의 단일 항목 추가 반복을 수행 :+
하려면 간단한 append()
방법으로 2.1 초 , 0.78 초가 걸립니다 . 에 대한 사용자 정의 구현으로 라이브러리에서 수정할 수 없는지 궁금 Array
하십니까?
편집 2
그만한 가치를 위해 티켓을 제출했습니다 : https://issues.scala-lang.org/browse/SI-5017
System.arraycopy(...)
대체Array.copy(...)
ArrayBuffer
한 후 변환 된를 사용하여 벤치 마크를 다시 실행할 수 있습니까 (사용 )? toArray
ArrayBuffer
그+=
방법은? 그러면 상각 된 O (1)이 추가됩니다.