Если оба массива имеют ту же длину , то это возможное решение:
let one = [1,3,5]
let two = [2,4,6]
let merged = zip(one, two).flatMap { [$0, $1] }
print(merged) // [1, 2, 3, 4, 5, 6]
Здесь zip()
перечисляет массивы параллельно и возвращает последовательность пар ( 2-элементные кортежи) с одним элементом из каждого массива. flatMap()
создает 2-элементный массив из каждой пары и конкатенирует результат.
Если массивы могут иметь разную длину , то вы добавляете дополнительные элементы более длинного массива в результат:
func mergeFunction<T>(one: [T], _ two: [T]) -> [T] {
let commonLength = min(one.count, two.count)
return zip(one, two).flatMap { [$0, $1] }
+ one.suffixFrom(commonLength)
+ two.suffixFrom(commonLength)
}
Обновление для Swift 3:
func mergeFunction<T>(_ one: [T], _ two: [T]) -> [T] {
let commonLength = min(one.count, two.count)
return zip(one, two).flatMap { [$0, $1] }
+ one.suffix(from: commonLength)
+ two.suffix(from: commonLength)
}