2012-03-12 34 views
11

Làm cách nào để chuyển đổi một số scala.collection.Iterator chứa hàng nghìn đối tượng thành một số scala.collection.immutable.Vector?Chuyển đổi Iterator Scala thành Vector

Tôi không tin rằng tôi có thể sử dụng _* vì số lượng mục.

Trả lời

14

Bạn có thể

Vector() ++ myIterator 

mang đến cho những điều đúng với đúng loại. Đối với các vectơ và vòng lặp rất nhỏ, trong các vòng hiệu suất cao, thay vào đó bạn có thể muốn

val b = Vector.newBuilder[WhateverType] 
while (myIterator.hasNext) { b += myIterator.next } 
b.result 

công việc tối thiểu cần thiết (theo như tôi biết) để tạo vectơ. toIndexedSeq làm về cơ bản này, nhưng trả về một kiểu chung chung hơn (vì vậy bạn không thực sự đảm bảo một Vector, thậm chí nếu nó trả về một Vector bây giờ.)

6

Bạn có thể sử dụng toIndexedSeq. Nó không tĩnh trả về một Vector, nhưng nó thực sự là một.

+3

Rất có thể OP thực sự chỉ muốn một số chuỗi được lập chỉ mục và không nhất thiết phải là 'Vector' cụ thể. –

+0

Bạn nói đúng. Tôi cần (gần) thời gian truy cập ngẫu nhiên và tính toán độ dài. – Ralph

1

Bạn thể sử dụng _*, vì tất cả nó làm là vượt qua một Seq với tất cả các đối số. Tuy nhiên, nó sẽ không hiệu quả vì nó sẽ chuyển đổi vòng lặp đầu tiên thành một chuỗi, và sau đó sử dụng chuỗi đó để tạo ra một chuỗi khác là.

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