有没有简洁的方法可以在Scala中将Seq
转换为ArrayBuffer
?
答案 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节)。