2016-11-08 7 views
0

Ich habe eine leere ListBuffer[ListBuffer[(String, Int)]]() initialisiert wie so, und mit einer Nummer n, ich möchte es mit n füllen.Wie erstellt man einen verschachtelten ListBuffer n mal in Scala in einem anderen ListBuffer?

Zum Beispiel, wenn n=2 dann kann ich zwei innerhalb ListBuffer[ListBuffer[(String, Int)]]() initialisieren, wenn das irgendeinen Sinn macht. Ich habe versucht, n mal zu loopen und verwenden Sie die insertAll -Funktion, um eine leere Liste einzufügen, aber ich habe nicht funktioniert.

Antwort

3

Verwendung füllen

fill ist eine Standardfunktion Scala-Bibliothek, um eine Datenstruktur mit vorgegebenen Elementen zu füllen. Es ist sehr praktisch und spart viel Tipparbeit.

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)) ... 

fill Umsetzung in Standardbibliothek

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() 
    } 

Die obige Implementierung ist für eine eindimensionale Datenstruktur.

Allgemeine Vorschläge

Sieht aus wie Sie Scala wie die Java Art und Weise verwenden. Das ist nicht gut. Umfassen Sie einen funktionalen Weg, um Dinge für offensichtliche Vorteile zu tun.

Verwenden immutable Sammlungen wie List, Vector statt mutable Sammlungen. Verwenden Sie keine veränderbaren Sammlungen, bis Sie einen String-Grund dafür haben.

gleiche kann

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

scala -> 1 ist mit unveränderliche Liste erfolgen gleiche wie ("scala", 1)

Verwandte Themen