0

ListBuffer[ListBuffer[(String, Int)]]()我有一个像这样初始化的空,并给定一个数字n,我想用n ListBuffer[(String, Int)].

例如,如果有任何意义,n=2我可以ListBuffer[(String, Int)]在其中初始化两个。ListBuffer[ListBuffer[(String, Int)]]()我试图循环n时间并使用 insertAll 函数插入一个空列表,但我没有工作。

4

1 回答 1

3

使用填充

fill是一个标准的 Scala 库函数,用于用预定义的元素填充数据结构。它非常方便,可以节省大量打字。

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

斯卡拉 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。情况不妙。采用功能性的方式做事以获得明显的好处。

使用, 之immutable类的集合ListVector而不是mutable集合。除非您有字符串原因,否则不要使用可变集合。

使用不可变列表可以完成同样的事情

List.fill(100)(List("scala" -> 1))

scala -> 1("scala", 1)

于 2016-11-08T21:12:34.590 回答