如果在swift中创建了两个数组,就像这样:

var a:[CGFloat] = [1, 2, 3]
var b:[CGFloat] = [4, 5, 6]

如何将它们合并为[1,2,3,4,5,6]?


当前回答

如果你想在一个特定的索引后面插入第二个数组,你可以这样做(从Swift 2.2开始):

let index = 1
if 0 ... a.count ~= index {
     a[index..<index] = b[0..<b.count]
}
print(a) // [1.0, 4.0, 5.0, 6.0, 2.0, 3.0] 

其他回答

不同数据类型的Marge数组:

var arrayInt = [Int]()
arrayInt.append(6)
var testArray = ["a",true,3,"b"] as [Any]
testArray.append(someInt)

输出:

["a", true, 3, "b", "hi", 3, [6]]

为了完成可能的选项列表,可以使用reduce来实现flatten的行为:

var a = ["a", "b", "c"] 
var b = ["d", "e", "f"]

let res = [a, b].reduce([],combine:+)

在这些方案中,最好的替代方案(性能/内存方面)是简单的扁平化,它只是惰性地包装原始数组,而不创建新的数组结构。

但是请注意flatten并不返回一个LazyCollection,因此懒惰行为不会沿着链传播到下一个操作(map、flatMap、filter等等)。

如果lazy在你的特定情况下是有意义的,只需要记住在flatten()前加上一个.lazy,例如,这样修改Tomasz sample:

let c = [a, b].lazy.flatten()

如果你想在一个特定的索引后面插入第二个数组,你可以这样做(从Swift 2.2开始):

let index = 1
if 0 ... a.count ~= index {
     a[index..<index] = b[0..<b.count]
}
print(a) // [1.0, 4.0, 5.0, 6.0, 2.0, 3.0] 

如果你不喜欢操作符重载,或者更喜欢函数类型:

// use flatMap
let result = [
    ["merge", "me"], 
    ["We", "shall", "unite"],
    ["magic"]
].flatMap { $0 }
// Output: ["merge", "me", "We", "shall", "unite", "magic"]

// ... or reduce
[[1],[2],[3]].reduce([], +)
// Output: [1, 2, 3]

您可以用+连接数组,构建一个新数组

let c = a + b
print(c) // [1.0, 2.0, 3.0, 4.0, 5.0, 6.0]

或者用+=将一个数组附加到另一个数组(或append):

a += b

// Or:
a.append(contentsOf: b)  // Swift 3
a.appendContentsOf(b)    // Swift 2
a.extend(b)              // Swift 1.2

print(a) // [1.0, 2.0, 3.0, 4.0, 5.0, 6.0]