2016-11-08 45 views
0

我已经初始化,像这样一个空ListBuffer[ListBuffer[(String, Int)]](),并给出了一些n,我想nListBuffer[(String, Int)]来填补它。如何在Scala中创建另一个ListBuffer中的嵌套ListBuffer?

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

回答

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)

相关问题