Frage Konvertieren eines Scala-Iterators in einen Vektor


Wie konvertiere ich ein scala.collection.Iterator enthält Tausende von Objekten zu a scala.collection.immutable.Vector?

Ich glaube nicht, dass ich es gebrauchen kann _* wegen der Anzahl der Artikel.


11
2018-03-12 19:29


Ursprung


Antworten:


Sie können

Vector() ++ myIterator

Das gibt die richtige Sache mit dem richtigen Typ. Für sehr kleine Vektoren und Iteratoren, in Hochleistungsschleifen, möchten Sie vielleicht stattdessen

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

was die minimale Arbeit erfordert (soweit ich weiß), um einen Vektor zu erstellen. toIndexedSeq tut dies im Wesentlichen, aber gibt einen allgemeineren Typ zurück (so dass Sie nicht wirklich garantiert sind) Vector, auch wenn es einen zurückgibt Vector jetzt.)


14
2018-03-12 19:46



Sie können verwenden toIndexedSeq. Es gibt kein statisches zurück Vector, aber es ist tatsächlich eins.


6
2018-03-12 19:35



Sie kann benutzen _*, da alles, was es tut, ist a Seq mit allen Argumenten. Es wird jedoch ineffizient sein, da es zuerst den Iterator in eine Sequenz konvertiert und dann diese Sequenz zum Erstellen verwendet Ein weiterer Sequenz.


1
2018-03-13 16:39