如何交错两个数组?

Nei*_*ton 12 arrays array-merge swift

如果我有两个阵列,例如

let one = [1,3,5]
let two = [2,4,6]
Run Code Online (Sandbox Code Playgroud)

我想以下列模式合并/交错数组[one [0],two [0],one [1],two [1] etc ....]

//prints [1,2,3,4,5,6]
let comibned = mergeFunction(one, two)
print(combined)
Run Code Online (Sandbox Code Playgroud)

实现组合功能的好方法是什么?

func mergeFunction(one: [T], _ two: [T]) -> [T] {
    var mergedArray = [T]()
    //What goes here
    return mergedArray
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*n R 28

如果两个数组具有相同的长度,那么这是一个可能的解决方案:

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]
Run Code Online (Sandbox Code Playgroud)

这里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)
}
Run Code Online (Sandbox Code Playgroud)

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)
}
Run Code Online (Sandbox Code Playgroud)


Cha*_* A. 6

如果您只是想交错两个数组,您可以执行以下操作:

let maxIndex = max(one.count, two.count)
var mergedArray = Array<T>()
for index in 0..<maxIndex {
    if index < one.count { mergedArray.append(one[index]) }
    if index < two.count { mergedArray.append(two[index]) }
}

return mergedArray
Run Code Online (Sandbox Code Playgroud)

  • 好吧,flatmap不会交错项目.您可能会在两个阵列的元组中使用映射,但我认为这不会更清楚. (2认同)