2013-01-21 10 views
18

toBuffer 또는 메서드를 통해 효율적으로이를 수행 할 수있는 방법이 있습니까? 다음과 같이 내 진짜 문제는 내가 파서 목록을 짓고 있어요된다목록을 ListBuffer로 변환하는 방법?

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

을하지만, 구축 후, 나는 대신 버퍼되고 싶어요 - 난 그냥 버퍼 직선을 구축하는 방법을 잘 모르겠어요 파서로부터.

+0

'toBuffer'는 충분히 성능이 좋지 않습니까? – cheeken

+0

올바르게 이해하면, 그는'toBuffer'에 의해 반환 된'Buffer'뿐만 아니라'ListBuffer'를 원합니다. –

+0

예, ListBuffer가 필요합니다. 변환 비용 (선형으로 가정)이 무엇인지 알고 싶기 때문에 성능 문제는 간단합니다. 그러나 이것은 초기화 단계의 일부이므로 허용 될 수 있습니다. – Dan

답변

37

to 실제로 트릭을 수행, 사용하기 매우 간단하다 : 스칼라 2.9.x 스칼라 2.10.x

에서

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> ListBuffer.empty ++= l 
res1: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3) 
+0

니스; +1! (2.8의 관점에서) 콜렉션 API가 더 이상 불가 능할 것이라고 생각할 때 ... – cheeken

+0

'++ ='는 빈 List를 생성하고 다시 그것을 버리는 대신에'ListBuffer'를 재사용 할 것입니다 . (비어있는'ListBuffer'를 만드는 것이 특별히 비싸지는 않습니다.) –

+0

좋은 지적, 나는 대답을 업데이트 할 것입니다. –