gpt4 book ai didi

scala - 克隆 ListBuffer 不可变问题 Scala

转载 作者:行者123 更新时间:2023-12-02 09:22:50 24 4
gpt4 key购买 nike

我有一个 var x类型 ListBuffer[ListBuffer[Int]]我在其中使用函数 clone 进行克隆并设置为另一个 var y , 然后我使用函数 update在这个新 var y更新内容,但是当我查看 var x 的原始内容时同var y ?为什么是这样?我究竟做错了什么?他们是一种解决方法吗?我正在尝试获得一份 ListBuffer 的副本,我可以在不更改初始 ListBuffer 的原始内容的情况下对其进行修改。

最佳答案

clone只做一个浅拷贝,你需要一个深拷贝:

scala> import collection.mutable.ListBuffer
import collection.mutable.ListBuffer

scala> var a = ListBuffer(ListBuffer(1, 2), ListBuffer(3,4))
a: scala.collection.mutable.ListBuffer[scala.collection.mutable.ListBuffer[Int]] = ListBuffer(ListBuffer(1, 2), ListBuffer(3, 4))


scala> var b = a.clone
b: scala.collection.mutable.ListBuffer[scala.collection.mutable.ListBuffer[Int]] = ListBuffer(ListBuffer(1, 2), ListBuffer(3, 4))

scala> b(0)(0) = 100

scala> a
res1: scala.collection.mutable.ListBuffer[scala.collection.mutable.ListBuffer[Int]] = ListBuffer(ListBuffer(100, 2), ListBuffer(3, 4))

scala> b
res2: scala.collection.mutable.ListBuffer[scala.collection.mutable.ListBuffer[Int]] = ListBuffer(ListBuffer(100, 2), ListBuffer(3, 4))

scala> var c = a.clone.map(_.clone)
c: scala.collection.mutable.ListBuffer[scala.collection.mutable.ListBuffer[Int]] = ListBuffer(ListBuffer(100, 2), ListBuffer(3, 4))

scala> c(0)(0) = 1000

scala> c
res3: scala.collection.mutable.ListBuffer[scala.collection.mutable.ListBuffer[Int]] = ListBuffer(ListBuffer(1000, 2), ListBuffer(3, 4))

scala> a
res4: scala.collection.mutable.ListBuffer[scala.collection.mutable.ListBuffer[Int]] = ListBuffer(ListBuffer(100, 2), ListBuffer(3, 4))

关于scala - 克隆 ListBuffer 不可变问题 Scala,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40602876/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com