Scala, wiederhole eine endliche Liste unendlich
Will ich mit Stream-Klasse in scala zum wiederholen einer vorgegebenen Liste unendlich.
Zum Beispiel die Liste (1,2,3,4,5) ich will einen stream erstellen, der gibt mir (1,2,3,4,5,1,2,3,4,5,1,2,3....)
So, ich kann wickeln Sie den Betrieb nehmen. Ich weiß, das kann auf andere Weise realisiert werden, aber ich will es auf diese Weise für einige Grund, nur humor mich 🙂
Also die Idee ist, dass mit dieser unendlichen Zyklus erstellt aus einer Liste, die ich verwenden kann, nehmen Sie den Betrieb, und wenn er erreicht das Ende der Liste it-Zyklen.
Wie kann ich einen stream, die einfach wiederholt, zu einer gegebenen Liste?
InformationsquelleAutor der Frage Felix | 2010-01-19
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sehr ähnlich zu @Eastsun ist, aber ein bisschen mehr Absicht enthüllt. Getestet in Scala 2.8.
Alternativ mit Scalaz:
InformationsquelleAutor der Antwort retronym
Eine alternative Methode ist die Verkettung der
.toStream
der Eingabe mit sich selbst rekursiv. Das ist,InformationsquelleAutor der Antwort Volkan Yazıcı
Gibt es eine einfache Möglichkeit, mit Stream#flatten in scala 2.8
InformationsquelleAutor der Antwort Eastsun
Hier ist eine Implementierung, die nicht davon ausgehen, dass
length
effizient:Sollte dies laufen in konstanter Zeit für alle
Seq
(einschließlichList
oder sogarStream
) und nur auferlegt, eine Konstante Zeit-overhead, füllen Sie jedes element. Auch, es funktioniert sogar für unendliche Sequenzen. So können Sie rufen Sierep
auf eine unendlicheStream
und die daraus resultierendenStream
entspricht den input.InformationsquelleAutor der Antwort Daniel Spiewak
Gestohlen blatently von der hervorragenden Scala by Example Buch, Kapitel 12, und mit ein paar Modifikationen:
Dies funktioniert für alle Seq-Typen (es sei denn, Sie kann nicht gelesen werden aus mehreren Zeiten, natürlich). Vielleicht nicht effizient, wenn die .Länge Aufruf langsam ist. Getestet in Scala 2.7.7.
InformationsquelleAutor der Antwort Justin W