AngularJS - почему $ apply требуется для правильного разрешения обещания $ q?

Если оба массива имеют ту же длину , то это возможное решение:

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)
}
30
задан Saurabh Nanda 7 February 2013 в 07:59
поделиться