繁体   English   中英

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

[英]How to create a nested ListBuffer within another ListBuffer n times in Scala?

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

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

使用填充

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。 不是很好。 拥抱功能性做事方式,以获得明显的好处。

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

使用不可变列表可以完成相同的操作

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

scala -> 1("scala", 1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM