Ich habe Probleme eine elegante Art und Weise darstellend in Swift den folgenden Code neu zu erstellen:Splitting ein Wort in Paare
In Python (richtig, prägnant, elegant):
>>> def splits(word):
... return [(word[:i], word[i:]) for i in range(len(word) + 1)]
...
>>> splits("abc")
[('', 'abc'), ('a', 'bc'), ('ab', 'c'), ('abc', '')]
In Swift (Schein- und ein bisschen auf der schweren Seite):
func splits(word: String) -> [(String,String)] {
return word.characters.indices.map {
return (word[word.startIndex..<$0], word[$0..<word.endIndex])
}
}
splits("abc")
"[("", "abc"), ("a", "bc"), ("ab", "c")]"
Wie Sie sehen können, die Swift-Version fehlt th Das letzte Paar. Wie kann ich dies erreichen (abgesehen davon, dass ich ein letztes Paar manuell angehängt habe), wenn ich weiß, dass die Indizes der Zeichenkette nicht das letzte Zeichen der Kartenschließung passieren?
EDIT:
I angepasst dies aus der Antwort:
func splits(word: String) -> [(String,String)] {
let chars = word.characters
return (0...chars.count).map {
(String(chars.dropFirst($0)),String(chars.dropLast(chars.count - $0)))
}
}
Hinweis t Hat Ihr Code eine * einzelne Zeichenfolge * und kein Array von Wortpaaren zurückgegeben. –
Die Frage wurde basierend auf Ihrer Eingabe aktualisiert. – Laurent