如何在 Scala 中在另一个 ListBuffer 中创建 n 次嵌套的 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))
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.fill(100)(List("scala" -> 1))
scala -> 1
等同于 ("scala", 1)
我有一个像这样初始化的空 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))
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.fill(100)(List("scala" -> 1))
scala -> 1
等同于 ("scala", 1)