2011-09-26 15 views
10

¿Hay alguna forma concisa de convertir un Seq en ArrayBuffer en Scala?Convertir Seq en ArrayBuffer

+0

duplicado: http://stackoverflow.com/questions/3074118/scala-how-do-i-convert-a-mapint-any-to-a-sortedmap-or-a-treemap – sschaef

Respuesta

12

Esto funcionará:

ArrayBuffer(mySeq : _*) 

Algunas explicaciones: se utiliza el método de aplicación en los ArrayBuffer companion object. La firma de ese método es

def apply [A] (elems: A*): ArrayBuffer[A] 

lo que significa que requiere una cantidad variable de argumentos. Por ejemplo:

ArrayBuffer(1, 2, 3, 4, 5, 6, 7, 8) 

es también una llamada válida. La ascripción: _ * indica al compilador que se debe usar un Seq en lugar de esa cantidad variable de argumentos (ver Sección 4.6.2 en el Scala Reference).

+0

Gracias Philippe, esto funciona bien para mí. – classicalist

22
scala> val seq = 1::2::3::Nil 
seq: List[Int] = List(1, 2, 3) 

scala> seq.toBuffer 
res2: scala.collection.mutable.Buffer[Int] = ArrayBuffer(1, 2, 3) 

EDITAR Después de 2.1x Scala, hay un método .to[Coll] definido en TraversableLike, que puede ser utilizado de la siguiente manera:

scala> import collection.mutable 
import collection.mutable 

scala> seq.to[mutable.ArrayBuffer] 
res1: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 3) 

scala> seq.to[mutable.Set] 
res2: scala.collection.mutable.Set[Int] = Set(1, 2, 3) 
+0

+1 'seq.toBuffer' tiene que ser la forma más clara y memorable – karmakaze

Cuestiones relacionadas