代码之家  ›  专栏  ›  技术社区  ›  St.Antario

切片数组到seq,无副本

  •  1
  • St.Antario  · 技术社区  · 6 年前

    我想分一杯 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 . 我在努力避免它。在斯卡拉有办法吗?

    1 回复  |  直到 6 年前
        1
  •  5
  •   Andrey Tyukin    6 年前

    代码如下:

    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 :

    “你的科学家们非常关注他们是否 能够 他们不会停下来想 应该 ."