2011-09-26 44 views

Trả lời

12

này sẽ làm việc:

ArrayBuffer(mySeq : _*) 

Một số giải thích: đây sử dụng phương pháp áp dụng trong các ArrayBuffer companion object. Chữ ký của phương thức đó là

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

có nghĩa là phải mất một số lượng đối số thay đổi. Ví dụ:

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

cũng là cuộc gọi hợp lệ. Các ascription: _ * chỉ ra cho trình biên dịch một Seq nên được sử dụng thay cho số lượng biến của các đối số (xem Phần 4.6.2 trong Scala Reference).

+0

Cảm ơn Philippe, điều này làm việc tốt cho tôi. – 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) 

EDIT Sau 2.1x Scala, có một phương pháp .to[Coll] quy định tại TraversableLike, có thể được sử dụng như sau:

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' phải là cách rõ ràng nhất và đáng nhớ nhất – karmakaze

Các vấn đề liên quan