【问题标题】:How to create a nested ListBuffer within another ListBuffer n times in Scala?如何在Scala中的另一个ListBuffer中创建一个嵌套的ListBuffer n次?
【发布时间】:2017-03-22 15:25:18
【问题描述】:

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

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

【问题讨论】:

    标签: scala list append listbuffer


    【解决方案1】:

    使用填充

    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 集合,例如ListVector,而不是mutable 集合。除非您有字符串原因,否则不要使用可变集合。

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

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

    scala -&gt; 1("scala", 1) 相同

    【讨论】:

      猜你喜欢
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-16
      • 1970-01-01
      • 2014-04-11
      相关资源
      最近更新 更多