Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将列表转换为ListBuffer?_List_Scala_Listbuffer - Fatal编程技术网

如何将列表转换为ListBuffer?

如何将列表转换为ListBuffer?,list,scala,listbuffer,List,Scala,Listbuffer,有没有办法有效地做到这一点,也许是通过toBuffer或其他方法?我真正的问题是我正在从解析器构建一个列表,如下所示: lazy val nodes: Parser[List[Node]] = phrase(( nodeA | nodeB | nodeC).*) 但是在构建它之后,我希望它成为一个缓冲区——我只是不知道如何直接从解析器构建缓冲区。到确实起到了作用,而且使用起来非常简单: scala> val l = List(1,2,3) l: List[Int] = List(1, 2

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

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

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

确实起到了作用,而且使用起来非常简单:

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)

您是否担心
toBuffer
的性能不够好?如果我理解正确,他想要一个
ListBuffer
,而不仅仅是
toBuffer
返回的任何
Buffer
是的,我需要一个ListBuffer。性能只是一个问题,因为我想知道转换的成本是多少(我假设是线性的),但由于这只是初始化步骤的一部分,这可能是可以接受的+1.就在我认为collections API再神奇不过的时候(从2.8的角度来看).
++=
将重用相同的
ListBuffer
,而不是创建一个空的,然后再扔掉它。(并不是说创建一个空的
ListBuffer
特别昂贵。)使用
Scala 2.13
List(1,2,3).to(collection.mutable.ListBuffer)
(需要简单的括号)。