【问题标题】:How to convert List to ListBuffer?如何将 List 转换为 ListBuffer?
【发布时间】:2013-01-21 16:32:35
【问题描述】:

有没有办法有效地做到这一点,也许是通过 toBuffer 或 to 方法?我真正的问题是我正在从解析器中构建一个列表,如下所示:

lazy val nodes: Parser[List[Node]] = phrase(( nodeA | nodeB | nodeC).*)

但是在构建它之后,我希望它成为一个缓冲区 - 我只是不确定如何直接从解析器构建一个缓冲区。

【问题讨论】:

  • 您是否担心toBuffer 的性能不够?
  • 如果我理解正确的话,他想要一个ListBuffer,而不是toBuffer返回的任何Buffer
  • 是的,我需要一个 ListBuffer。性能只是一个问题,因为我想知道转换的成本是多少(我假设是线性的),但由于这只是初始化步骤的一部分,这可能是可以接受的。

标签: list scala listbuffer


【解决方案1】:

to 确实可以解决问题,而且使用起来非常简单:

scala> val l = List(1,2,3)
l: List[Int] = List(1, 2, 3)
scala> l.to[ListBuffer]
res1: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3)

在 Scala 2.10.x 中工作

对于 scala 2.9.x,您可以这样做:

scala> ListBuffer.empty ++= l
res1: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3)

【讨论】:

  • 不错; +1!就在我认为集合 API 不能再神奇的时候(从 2.8 的角度来看)......
  • ++= 将重复使用相同的ListBuffer,而不是创建一个空的然后再将其丢弃。 (并不是说创建一个空的ListBuffer 特别昂贵。)
  • Scala 2.13:List(1,2,3).to(collection.mutable.ListBuffer)(需要简单的括号)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-27
  • 1970-01-01
  • 2018-12-27
  • 2013-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多