如何在Scala中n次在另一个ListBuffer中创建嵌套的ListBuffer?

时间:2016-11-08 21:09:34

标签: scala list append listbuffer

我有一个空的ListBuffer[ListBuffer[(String, Int)]]()初始化,并且给出了一个n,我想用n ListBuffer[(String, Int)]填充它。

例如,如果n=2,那么我可以在ListBuffer[(String, Int)]内初始化两个ListBuffer[ListBuffer[(String, Int)]](),如果这有意义的话。我试图循环n次并使用insertAll函数插入一个空列表,但我没有工作。

1 个答案:

答案 0 :(得分:3)

使用填充

fill是标准的Scala库函数,用于使用预定义元素填充数据结构。它非常方便,可以省去很多打字。

ListBuffer.fill(100)(ListBuffer("Scala" -> 1))

Scala REPL

scala> import scala.collection.mutable._
import scala.collection.mutable._

scala> ListBuffer.fill(100)(ListBuffer("Scala" -> 1))
res4: scala.collection.mutable.ListBuffer[scala.collection.mutable.ListBuffer[(String, Int)]] = ListBuffer(ListBuffer((Scala,1)), ListBuffer((Scala,1)), ListBuffer((Scala,1)), ListBuffer((Scala,1)), ListBuffer((Scala,1)) ...

填写标准库中的实现

def fill[A](n: Int)(elem: => A): CC[A] = {
    val b = newBuilder[A]
    b.sizeHint(n)
    var i = 0
    while (i < n) {
      b += elem
      i += 1
    }
    b.result()
  }

上述实现是针对一维数据结构的。

一般建议

看起来你像Java一样使用Scala。这个不好。拥抱功能性的方式,为明显的好处做事。

使用immutableList代替Vector个集合的mutable个集合。除非你有字符串原因,否则不要使用可变集合。

使用不可变List

可以完成同样的事情
List.fill(100)(List("scala" -> 1))

scala -> 1("scala", 1)

相同