2016-11-08 43 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)

相關問題