有沒有什麼辦法可以有效地做到這一點,也許通過toBuffer或方法?我真正的問題是我建立一個列表關閉解析器,如下:如何將List轉換爲ListBuffer?
lazy val nodes: Parser[List[Node]] = phrase((nodeA | nodeB | nodeC).*)
但是建立之後,我想這是一個緩衝區,而不是 - 我只是不知道如何建立一個緩衝直來自解析器。
有沒有什麼辦法可以有效地做到這一點,也許通過toBuffer或方法?我真正的問題是我建立一個列表關閉解析器,如下:如何將List轉換爲ListBuffer?
lazy val nodes: Parser[List[Node]] = phrase((nodeA | nodeB | nodeC).*)
但是建立之後,我想這是一個緩衝區,而不是 - 我只是不知道如何建立一個緩衝直來自解析器。
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)
不錯; +1!就在我認爲集合API不可能更神奇的時候(從2.8的角度來看)...... – cheeken
'++ ='會重複使用相同的'ListBuffer'而不是創建一個空的然後再將它扔掉。 (不是說創建一個空的'ListBuffer'特別昂貴。) –
好點,我會更新答案。 –
您擔心'toBuffer'性能不足? – cheeken
如果我理解正確,他希望得到一個'ListBuffer',而不是像'toBuffer'返回的那樣'Buffer'' –
是的,我需要一個ListBuffer。性能只是一個問題,因爲我想知道轉換的成本是多少(我認爲是線性的),但由於這只是初始化步驟的一部分,所以這可能是可以接受的。 – Dan