I die folgende Iterator habe:Iterieren in Scala: Prüfen, vorherigen Werte
val it = Iterator(("a",5),("a",3),("a",2),("a",1),("b",8),("b",2),("b",1),("c",1))
Die inneren Werte sortiert werden zunächst durch das erste Element (String) und andererseits von der zweiten (Int). Wie kann ich die ersten 2 Werte von jedem Buchstaben erhalten? So sollte das Ergebnis in diesem Beispiel sein:
Iterator(("a",5),("a",3),("b",8),("b",2),("c",1))
Es kann mit groupBy erfolgen:
it.toList.groupBy(_._1).mapValues(_.take(2)).values.flatten.toIterator
aber ich möchte eine Lösung finden, die durch jedes Element geht und überprüfen Sie die vorherigen ‚string‘ Element und wenn es die gleiche und die 'Anzahl' ist kleiner als 2 dann ist es yield
dieser Wert.
bearbeiten:
Nach der Logik der @jwvh Antwort: Wie kann es die ersten N-Werte anstelle der ersten 2 nehmen verallgemeinert werden?
danke! Ich habe versucht, die Ergebnisse in einer 'while'-Schleife auszugeben:' while (lit.hasNext()) {yield.next()} 'aber es funktioniert nicht. Gibt es einen Weg, es zu tun? –
oder wird diese 'für (elem <- lit) yield elem 'als eine gute Praxis angesehen? –
Ich entschuldige mich für die Kommentare. wie könnte dies auf N erste Werte statt auf die ersten 2 verallgemeinert werden? –