切片数组到seq没有副本

时间:2019-05-18 21:40:50

标签: arrays scala seq

我正在尝试获取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 example。数组未复制。但是当我尝试切片时

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 Example。我正在努力避免它。在Scala中有办法吗?

1 个答案:

答案 0 :(得分:5)

代码如下:

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

这是quote from Jurassic Park

  

“您的科学家对他们是否可以如此着迷,以至于他们不停地思考是否应该 。”