toBuffer 또는 메서드를 통해 효율적으로이를 수행 할 수있는 방법이 있습니까? 다음과 같이 내 진짜 문제는 내가 파서 목록을 짓고 있어요된다목록을 ListBuffer로 변환하는 방법?
lazy val nodes: Parser[List[Node]] = phrase((nodeA | nodeB | nodeC).*)
을하지만, 구축 후, 나는 대신 버퍼되고 싶어요 - 난 그냥 버퍼 직선을 구축하는 방법을 잘 모르겠어요 파서로부터.
toBuffer 또는 메서드를 통해 효율적으로이를 수행 할 수있는 방법이 있습니까? 다음과 같이 내 진짜 문제는 내가 파서 목록을 짓고 있어요된다목록을 ListBuffer로 변환하는 방법?
lazy val nodes: Parser[List[Node]] = phrase((nodeA | nodeB | nodeC).*)
을하지만, 구축 후, 나는 대신 버퍼되고 싶어요 - 난 그냥 버퍼 직선을 구축하는 방법을 잘 모르겠어요 파서로부터.
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)
니스; +1! (2.8의 관점에서) 콜렉션 API가 더 이상 불가 능할 것이라고 생각할 때 ... – cheeken
'++ ='는 빈 List를 생성하고 다시 그것을 버리는 대신에'ListBuffer'를 재사용 할 것입니다 . (비어있는'ListBuffer'를 만드는 것이 특별히 비싸지는 않습니다.) –
좋은 지적, 나는 대답을 업데이트 할 것입니다. –
'toBuffer'는 충분히 성능이 좋지 않습니까? – cheeken
올바르게 이해하면, 그는'toBuffer'에 의해 반환 된'Buffer'뿐만 아니라'ListBuffer'를 원합니다. –
예, ListBuffer가 필요합니다. 변환 비용 (선형으로 가정)이 무엇인지 알고 싶기 때문에 성능 문제는 간단합니다. 그러나 이것은 초기화 단계의 일부이므로 허용 될 수 있습니다. – Dan