如何在 ArrayBuffer 的 ArrayBuffer 中有效地追加 ArrayBuffer?

How to append effectively an ArrayBuffer in an ArrayBuffer of ArrayBuffer?

我试图在 ArrayBuffer 的 ArrayBuffer 中附加 ArrayBuffer,但结果对我来说似乎很奇怪。

 def main(args: Array[String]) {
    println(initArray(List(1,2,5,20)))
 }

 def initArray(numbers: List[Int]): Int = {
     var combination = ArrayBuffer[Int]()
     var combinations = ArrayBuffer[ArrayBuffer[Int]]()
     var finishedCombinations = ArrayBuffer[ArrayBuffer[Int]]()
     // Init
     for (number <- numbers) {
       combination.clear()
       combination.append(number)
       println("combination : "+combination)
       combinations.insert(0,combination)
       println("combinations : "+combinations)
     }
     combinations.size
 }

我得到了预期大小为 4 的 ArrayBuffer,但内容出乎意料:

期待得到:

组合:ArrayBuffer(ArrayBuffer(1), ArrayBuffer(2), ArrayBuffer(5), ArrayBuffer(20))

但我得到:

组合:ArrayBuffer(ArrayBuffer(20), ArrayBuffer(20), ArrayBuffer(20), ArrayBuffer(20))

我不清楚这种行为,有人可以帮忙吗?

此致。

逐步完成 List 将每个元素转换为 ArrayBuffer[Int],然后将每个元素附加到结果缓冲区。

import collection.mutable.ArrayBuffer

def initArray(numbers: List[Int]): Int = {
  val combinations = ArrayBuffer[ArrayBuffer[Int]]()
  numbers.map(ArrayBuffer() += _).foreach(combinations.append(_))
  combinations.size
}

当然,这完全没有意义,因为您正在构建缓冲区,返回其大小(与输入 List 的大小相同),然后丢弃刚刚构建的缓冲区。我假设这只是一个粗略的大纲,用于更大且实际有用的东西。

您重复将相同的 arraybuffer[int] 实例附加到主 arraybuffer.since 数组缓冲区在最后打印时是可变的它显示的属性与您所做的所有用途一致它。 Clear() 清除内容但不释放隐藏在引用后面的内存范围。您也许应该在循环本身中重新创建一个新的数组缓冲区,或者更好的是,使用一个新的不可变向量而不是数组缓冲区。