将Seq转换为ArrayBuffer

时间:2011-09-26 09:40:42

标签: scala seq arraybuffer

有没有简洁的方法可以在Scala中将Seq转换为ArrayBuffer

2 个答案:

答案 0 :(得分:25)

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)

编辑在Scala 2.1x之后,TraversableLike中定义了一种方法.to[Coll],可以按照以下方式使用:

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)

答案 1 :(得分:12)

这将有效:

ArrayBuffer(mySeq : _*)

一些解释:这使用ArrayBuffer companion object中的apply方法。该方法的签名是

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

意味着它需要可变数量的参数。例如:

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

也是有效的通话。 ascription:_ *向编译器指示应使用Seq代替可变数量的参数(参见Scala Reference中的第4.6.2节)。