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.
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.
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ờ.)
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.
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à.
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ể. –
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