我该如何在Swift中连接或合并数组?
我该如何在Swift中连接或合并数组?
如果在 Swift 中创建了两个数组,如下所示:
var a:[CGFloat] = [1, 2, 3] var b:[CGFloat] = [4, 5, 6]
如何将它们合并为 [1, 2, 3, 4, 5, 6]
?
通过 Swift 5,根据你的需求,你可以选择以下六种方式之一来连接/合并两个数组。
#1. 使用 Array
的 +(_:_:)
泛型运算符将两个数组合并为一个新数组
Array
有一个 +(_:_:)
泛型运算符,其具有以下 声明:
通过连接集合和序列的元素创建一个新集合。
static func +(lhs: Array , rhs: Other) -> Array where Other : Sequence, Self.Element == Other.Element
以下 Playground 示例代码展示了如何使用 +(_:_:)
泛型运算符将两个类型为 [Int]
的数组合并为一个新数组:
let array1 = [1, 2, 3] let array2 = [4, 5, 6] let flattenArray = array1 + array2 print(flattenArray) // prints [1, 2, 3, 4, 5, 6]
#2. 使用 Array
的 +=(_:_:)
泛型运算符将数组元素附加到现有数组中
Array
有一个 +=(_:_:)
泛型运算符,其具有以下 声明:
将序列的元素附加到可替换范围集合中。
static func +=(lhs: inout Array , rhs: Other) where Other : Sequence, Self.Element == Other.Element
以下 Playground 示例代码展示了如何使用 +=(_:_:)
泛型运算符将类型为 [Int]
的数组元素附加到现有数组中:
var array1 = [1, 2, 3] let array2 = [4, 5, 6] array1 += array2 print(array1) // prints [1, 2, 3, 4, 5, 6]
#3. 使用 Array
的 append(contentsOf:)
方法将一个数组附加到另一个数组中
Swift 的 Array
有一个 append(contentsOf:)
方法,其具有以下 声明:
将序列或集合的元素添加到此集合的末尾。
mutating func append(contentsOf newElements: S) where S : Sequence, Self.Element == S.Element
以下Playground示例代码显示了如何使用append(contentsOf :)
方法将一个[Int]
数组追加到另一个数组:
var array1 = [1, 2, 3] let array2 = [4, 5, 6] array1.append(contentsOf: array2) print(array1) // prints [1, 2, 3, 4, 5, 6]
#4. 使用Sequence
的flatMap(_:)
方法将两个数组合并为一个新数组
Swift为符合Sequence
协议的所有类型(包括Array
)提供了flatMap(_ :)
方法。flatMap(_ :)
有以下声明:
返回一个数组,该数组包含调用给定转换并使用该序列的每个元素的连接结果。
func flatMap(_ transform: (Self.Element) throws -> SegmentOfResult) rethrows -> [SegmentOfResult.Element] where SegmentOfResult : Sequence
以下Playground示例代码显示了如何使用flatMap(_ :)
方法将类型为[Int]
的两个数组合并为一个新数组:
let array1 = [1, 2, 3] let array2 = [4, 5, 6] let flattenArray = [array1, array2].flatMap({ (element: [Int]) -> [Int] in return element }) print(flattenArray) // prints [1, 2, 3, 4, 5, 6]
#5. 使用Sequence
的joined()
方法和Array
的init(_ :)
初始化程序将两个数组合并为一个新数组
Swift为符合Sequence
协议的所有类型(包括Array
)提供了joined()
方法。joined()
有以下声明:
返回连接的此序列的序列的元素。
func joined() -> FlattenSequence
另外,Swift
Array
有一个init(_:)
初始化程序。init(_:)
有以下声明:创建一个包含序列元素的数组。
init(_ s: S) where Element == S.Element, S : Sequence
因此,以下Playground示例代码展示了如何使用
joined()
方法和init(_:)
初始化程序将两个[Int]
类型的数组合并为一个新的数组:let array1 = [1, 2, 3] let array2 = [4, 5, 6] let flattenCollection = [array1, array2].joined() // type: FlattenBidirectionalCollection<[Array]> let flattenArray = Array(flattenCollection) print(flattenArray) // prints [1, 2, 3, 4, 5, 6]
#6. 使用
Array
的reduce(_:_:)
方法将两个数组合并为一个新数组Swift
Array
有一个reduce(_:_:)
方法。reduce(_:_:)
有以下声明:使用给定的闭包将序列元素组合在一起的结果。
func reduce(_ initialResult: Result, _ nextPartialResult: (Result, Element) throws -> Result) rethrows -> Result
以下Playground代码展示了如何使用
reduce(_:_:)
方法将两个[Int]
类型的数组合并为一个新的数组:let array1 = [1, 2, 3] let array2 = [4, 5, 6] let flattenArray = [array1, array2].reduce([], { (result: [Int], element: [Int]) -> [Int] in return result + element }) print(flattenArray) // prints [1, 2, 3, 4, 5, 6]