Scala reverse-string
Ich bin ein Neuling, scala, ich bin einfach nur zu schreiben eine einfache Funktion zur Umkehrung einer bestimmten Zeichenfolge:
def reverse(s: String) : String
for(i <- s.length - 1 to 0) yield s(i)
den Ertrag gibt wieder eine scala.Sammlung.unveränderlich.IndexedSeq[Char], und kann nicht es in einen String konvertieren. (oder ist es etwas anderes?)
wie Schreibe ich diese Funktion ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beachten Sie, dass es bereits definierte Funktion:
Aber wenn Sie das tun wollen, indem Sie sich selbst:
oder (manchmal ist es besser, zu verwenden
until
, aber wahrscheinlich nicht in diesem Fall)Beachten Sie auch, dass, wenn Sie Umgekehrt zählen (von größeren auf kleinere Wert) sollten Sie angeben, negative Schritt, oder Sie bekommen eine leere Menge:
Hier eine kurze version
Bearbeiten
: oder noch kürzer, wir haben das fantastisch kryptische
aber ich würde nicht wirklich empfehlen, diese...
foldLeft
(/:
ist nur ein kurzer hand der name für die Methode), die einen ersten Wert, und dann gilt ein operator auf jeden Wert der Sequenz von Links nach rechts. In diesem Fall wird die Sequenz ist der string, und der Betreiber ist nur voranstellen der Zeichen des string für das Ergebnis.s
mit dem argument""
da die Methode/:
endet in:
. Wenn Sie look-up-String in der Scala docs wirst du nicht finden, da es nur die Java-Klasse, aber finden SieStringOps
an dem die Saiten werden implizit konvertiert, und hier finden Sie die/:
Methode. Es ist Curry und bringt ein zweites argument, das ist (hier) eine anonyme Funktion vom Typ(String, Char) => String
. Siehe auch stackoverflow.com/q/7339618/770361, stackoverflow.com/questions/2293592/...Wie durch das om-nom-nom, achten Sie auf die
by -1
(sonst sind Sie nicht wirklich Durchlaufen und Ihr Ergebnis leer ist). Der andere trick, den Sie verwenden können, ist"Sammlung".breakOut
.Es kann auch vorgesehen werden, um die
for
Verständnis, wie diese:Den Vorteil der Verwendung von
breakOut
ist, dass Sie vermeiden, die Schaffung einer intermediären Struktur wie in dermkString
Lösung.Hinweis:
breakOut
nutztCanBuildFrom
und Bauherren, die Teil der Grundlage der neu gestalteten Sammlung Bibliothek eingeführt, in scala 2.8.0breakOut
in dieser Art und Weise.Sie können auch schreiben dies mit einem rekursiven Ansatz (wirft man in nur zum Spaß)
Alle oben genannten Antworten sind richtig und hier ist mein nehmen: