Iはスイフトに次のコード再作成するためにエレガントな方法を描い問題が午前:分割ペアにワード
Pythonで(正確、簡潔、エレガント):
>>> def splits(word):
... return [(word[:i], word[i:]) for i in range(len(word) + 1)]
...
>>> splits("abc")
[('', 'abc'), ('a', 'bc'), ('ab', 'c'), ('abc', '')]
スウィフトInを(偽の重い側のビット):
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")]"
あなたが見ることができるように、スウィフトバージョンは目が欠落しています最後のペア。文字列のインデックスがマップクロージャの最後の文字を渡していないことを知っているなら、これをどのようにして(手動で最後のペアを追加するか)できますか?
EDIT:
私は答えからこれを適応:
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)))
}
}
ノートトンあなたのコードは、単語のペアの配列ではなく、*単一の文字列*を返します。 –
入力内容に基づいて質問が更新されました。 – Laurent