2015-03-30 2 views
3

У меня есть этот код:Как вставить элемент повторно между двумя элементами массива?

let items = [1, 2, 3] 
let sep = 0 

Я хочу, чтобы вставить sep между каждыми двумя элементами items, чтобы получить результат, похожий на этот:

newItems = [1, 0, 2, 0, 3] 

Есть краткий способ сделать это с помощью функциональной программирование в Swift? Нечто похожее на String.join(), но для массивов.

ответ

7

Это делает трюк:

let items = [1, 2, 3] 
let sep = 0 

let newItems = [sep].join(items.map { [ $0 ] }) 

println(newItems) // [1, 0, 2, 0, 3] 

items.map { [ $0 ] } создает массив одноэлементных массивов, а затем [sep].join(...) вставляет разделитель и сцепляет элементов.

Другое возможное решение:

let newItems = map(0 ..< 2*items.count - 1) { $0 % 2 == 0 ? items[$0/2] : sep } 

, которая отображает индексы даже к соответствующему элементу items, и нечетных индексов к сепаратору.

Я предположить, что второе решение работает лучше, потому что он не создавать так много промежуточных массивов, но я оставляю испытание для вас :)

+0

Я не Не знаю, как я пропустил «Array.join». Благодаря! – hashemi

+2

Имейте в виду, что если вы используете ссылочный тип как разделитель, его изменение изменит все экземпляры, вставленные в массив! –

2

преобразуется в стремительной 3.1

extension Array { 

    func insert(separator: Element) -> [Element] { 

    return (0 ..< 2 * count - 1).map { $0 % 2 == 0 ? self[$0/2] : separator } 
    } 
} 
+1

Очень приятно спасибо! –

Смежные вопросы