¿Cómo convierto un scala.collection.Iterator
que contiene miles de objetos a un scala.collection.immutable.Vector
?Conversión de un iterador de Scala en un vector
No creo que pueda usar _*
debido a la cantidad de elementos.
¿Cómo convierto un scala.collection.Iterator
que contiene miles de objetos a un scala.collection.immutable.Vector
?Conversión de un iterador de Scala en un vector
No creo que pueda usar _*
debido a la cantidad de elementos.
Puede
Vector() ++ myIterator
que da la cosa correcta con el tipo correcto. Por muy pequeños vectores e iteradores, en los bucles de alto rendimiento, en su lugar puede desear
val b = Vector.newBuilder[WhateverType]
while (myIterator.hasNext) { b += myIterator.next }
b.result
el que hace el trabajo mínimo necesario (por lo que yo sé) para crear un vector. toIndexedSeq
básicamente hace esto, pero devuelve un tipo más genérico (por lo que no está realmente garantizado un Vector
, incluso si no devuelve ningún Vector
ahora.)
Puede usar toIndexedSeq
. No devuelve estáticamente un Vector
, pero en realidad es uno.
Usted puede uso _*
, ya que todo lo que hace es pasar una Seq
con todos los argumentos. Sin embargo, será ineficiente, ya que primero convertirá el iterador en una secuencia, y luego usará esa secuencia para crear otra secuencia.
Las posibilidades son OP simplemente quiere alguna secuencia indexada, y no necesariamente un 'Vector' específicamente. –
Tienes razón. Necesito (casi) acceso aleatorio de tiempo constante y cálculos de longitud. – Ralph