切片数组到seq没有副本

St.*_*rio 2 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
Run Code Online (Sandbox Code Playgroud)

它工作正常: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
Run Code Online (Sandbox Code Playgroud)

可以看到复制了:Ideone Live Example。我正在努力避免它。在Scala中有办法吗?

And*_*kin 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
Run Code Online (Sandbox Code Playgroud)

这是侏罗纪公园一句话

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

  • 我只是记得你可以`val b = a.view(1,9)`。 (2认同)