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

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

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


当前回答

这是合并两个数组的最短方法。

 var array1 = [1,2,3]
 let array2 = [4,5,6]

连接/合并他们

array1 += array2
New value of array1 is [1,2,3,4,5,6]

其他回答

这是合并两个数组的最短方法。

 var array1 = [1,2,3]
 let array2 = [4,5,6]

连接/合并他们

array1 += array2
New value of array1 is [1,2,3,4,5,6]

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

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]

如果你正在处理大型序列,那么更有效的方法是使用Apple算法包中定义的链方法。

let n1 = [1, 2, 3]
let n2 = [4, 5, 6]

let allNumbers = chain(n1, n2)
for num in allNumbers {
    print(num) // for loop prints 1 to 6
}

// Similarly for String type
let s = chain("foo", "BAR") // produces "fooBAR"

Chain相对于其他方法的优点:

允许混合不同的序列类型

let n = chain([10, 20, 30], 1...3) // will produce 10, 20, 30, 1, 2, 3

不进行新的内存分配

chain方法本质上迭代第一个序列,当它在第一个序列中遇到endIndex时,它就开始无缝地迭代第二个序列。

var arrayOne = [1,2,3]
var arrayTwo = [4,5,6]

如果你想要的结果是:[1,2,3,[4,5,6]]

arrayOne.append(arrayTwo)

上面的代码将arrayOne转换为单个元素,并将其添加到arrayTwo的末尾。

如果你想要的结果是:[1,2,3,4,5,6],那么,

arrayOne.append(contentsOf: arrayTwo)

上面的代码将arrayOne的所有元素添加到arrayTwo的末尾。

谢谢。

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

// 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]