Конвертировать Seq в ArrayBuffer - PullRequest
13 голосов
/ 26 сентября 2011

Есть ли какой-нибудь краткий способ конвертировать Seq в ArrayBuffer в Scala?

Ответы [ 2 ]

25 голосов
/ 26 сентября 2011
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)

EDIT После Scala 2.1x есть метод .to[Coll], определенный в TraversableLike , который можно использовать следующим образом:

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)
12 голосов
/ 26 сентября 2011

Это будет работать:

ArrayBuffer(mySeq : _*)

Некоторые объяснения: здесь используется метод apply в сопутствующем объекте ArrayBuffer . Подпись этого метода

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

означает, что требуется переменное количество аргументов. Например:

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

также является допустимым вызовом. Буква: _ * указывает компилятору, что вместо этого переменного числа аргументов следует использовать Seq (см. Раздел 4.6.2 в Справочнике по Scala ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...