我有一个空的ListBuffer[ListBuffer[(String, Int)]]()
初始化,并且给出了一个n
,我想用n
ListBuffer[(String, Int)]
填充它。
例如,如果n=2
,那么我可以在ListBuffer[(String, Int)]
内初始化两个ListBuffer[ListBuffer[(String, Int)]]()
,如果这有意义的话。我试图循环n
次并使用insertAll函数插入一个空列表,但我没有工作。
答案 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。这个不好。拥抱功能性的方式,为明显的好处做事。
使用immutable
,List
代替Vector
个集合的mutable
个集合。除非你有字符串原因,否则不要使用可变集合。
使用不可变List
可以完成同样的事情List.fill(100)(List("scala" -> 1))
scala -> 1
与("scala", 1)