首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将ArrayBuffer有效地附加到ArrayBuffer of ArrayBuffer中?

如何将ArrayBuffer有效地附加到ArrayBuffer of ArrayBuffer中?
EN

Stack Overflow用户
提问于 2017-02-14 16:17:35
回答 2查看 4.1K关注 0票数 0

我试图将ArrayBuffer添加到ArrayBuffer of ArrayBuffer中,但结果对我来说似乎很奇怪。

代码语言:javascript
复制
 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))

这个行为对我来说不清楚,有人能帮忙吗?

致以问候。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-14 21:52:32

在主arraybuffer.since中重复附加相同的arraybufferint实例--数组缓冲区在最后打印时是可变的--它显示了与您对它的所有使用相一致的属性。Clear()清除内容,但不释放隐藏在引用后面的内存跨度。您可能应该在循环本身中重新创建一个新的数组缓冲区,或者更好的方法是使用一个新的不可变向量,而不是数组缓冲区。

票数 0
EN

Stack Overflow用户

发布于 2017-02-14 19:37:55

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

代码语言:javascript
复制
import collection.mutable.ArrayBuffer

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

当然,这都是毫无意义的,因为您正在构建一个缓冲区,返回它的大小(与输入List大小相同),然后丢弃您刚刚构建的缓冲区。我假设这只是一个更大、更有用的东西的大致轮廓。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42231107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档