2013-01-21 48 views
18

有沒有什麼辦法可以有效地做到這一點,也許通過toBuffer或方法?我真正的問題是我建立一個列表關閉解析器,如下:如何將List轉換爲ListBuffer?

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

但是建立之後,我想這是一個緩衝區,而不是 - 我只是不知道如何建立一個緩衝直來自解析器。

+0

您擔心'toBuffer'性能不足? – cheeken

+0

如果我理解正確,他希望得到一個'ListBuffer',而不是像'toBuffer'返回的那樣'Buffer'' –

+0

是的,我需要一個ListBuffer。性能只是一個問題,因爲我想知道轉換的成本是多少(我認爲是線性的),但由於這只是初始化步驟的一部分,所以這可能是可以接受的。 – Dan

回答

37

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) 

作品中階2.10.x

斯卡拉2.9.x,你可以這樣做:

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

不錯; +1!就在我認爲集合API不可能更神奇的時候(從2.8的角度來看)...... – cheeken

+0

'++ ='會重複使用相同的'ListBuffer'而不是創建一個空的然後再將它扔掉。 (不是說創建一個空的'ListBuffer'特別昂貴。) –

+0

好點,我會更新答案。 –

相關問題