Срезать массив в seq без копирования - PullRequest
2 голосов
/ 19 мая 2019

Я пытаюсь получить фрагмент Array как Seq, избегая копирования. Я могу использовать метод toSeq.

val array = Array[AnyRef](
  new Integer(1), 
  new Integer(2), 
  new Integer(3), 
  new Integer(4), 
  new Integer(5)
)
val seq = array.toSeq
array(1) = null
println(seq.mkString(",")) //1,null,3,4,5

Работает нормально: Пример Ideone Live . Массив не был скопирован. Но когда я пытаюсь нарезать его

val array = Array[AnyRef](
  new Integer(1),
  new Integer(2),
  new Integer(3),
  new Integer(4),
  new Integer(5)
)
val seq = array.toSeq.slice(0, 3)
array(1) = null
println(seq.mkString(",")) //1,2,3

Как видно, копия сделана: Пример Ideone Live . Я пытаюсь избежать этого. Есть ли способ сделать это в Scala?

1 Ответ

5 голосов
/ 19 мая 2019

Вот код:

val a = (0 to 10).toArray
val b = a.toSeq.view.slice(1, 9)
a(5) = 12345
b.mkString(",") // res5: String = 1,2,3,4,12345,6,7,8

А вот цитата из Парка Юрского периода :

"Ваши ученые были настолько озабочены тем, могут ли они , что они не переставали думать, стоит ли им ."

...