Я пытаюсь написать функцию, которая примет в качестве аргумента массив символов (назовите это слово) и один символ и вернет массив слов, с характером вставленной во всех положениях:Swift - вставить в массив символов, функциональное решение
Пример
typealias Word = [Character]
func insert(letter: Character, into word: Word) -> [Word] {
}
Так телефону:
insert("c", into: ["a", "b"])
вернется:
[["c", "a", "b"], ["a", "c", "b"], ["a", "b", "c"]]
Простейших я придумал до сих пор:
func insert(letter: Character, into word: Word) -> [Word] {
return Array<Int>(0...word.count).map() {
var newWord = word
newWord.insert(letter, atIndex: $0)
return newWord
}
}
, от которого я получил родовую версию:
extension Array
{
func insert(element: T) -> [[T]] {
return (0...self.count).map() {
var newArray = self
newArray.insert(element, atIndex: $0)
return newArray
}
}
}
Однако, это предполагает создание изменяемой копии входное слово. Это там лучший/более элегантный/более простой (функциональный) способ достичь этого?
хорошее решение (но очень медленно: около 1000 раз медленнее, чем метод в вопросе - просто заявляя). –
Yep ... печально: -/ Но вопрос, похоже, требует подхода _functional_. Насколько готов компилятор Swift и оптимизатор для функционального программирования, остается открытым для меня вопросом. И, наверное, немного не по теме. –