У меня возникли проблемы воображая элегантный способ воссоздать в Swift следующий код:Расщепление слово в пар
В Python (правильно, кратким, элегантный):
>>> def splits(word):
... return [(word[:i], word[i:]) for i in range(len(word) + 1)]
...
>>> splits("abc")
[('', 'abc'), ('a', 'bc'), ('ab', 'c'), ('abc', '')]
В Swift (поддельным и немного на тяжелой стороне):
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")]"
Как вы можете видеть, Swift версия отсутствует тыс e последняя пара. Как я могу это достичь (помимо добавления одной последней пары вручную), зная, что индексы в символьной строке не проходят мимо последнего символа в закрытии карты?
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