如何在Swift中串联或合并数组?

如果有两个这样迅速创建的数组:


var a:[CGFloat] = [1, 2, 3]

var b:[CGFloat] = [4, 5, 6]

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


慕斯王
浏览 3292回答 3
3回答

白板的微信

您可以使用串联数组+,建立一个新数组let c = a + bprint(c) // [1.0, 2.0, 3.0, 4.0, 5.0, 6.0]或使用+=(或append)将一个数组附加到另一个数组:a += b// Or:a.append(contentsOf: b)  // Swift 3a.appendContentsOf(b)    // Swift 2a.extend(b)              // Swift 1.2print(a) // [1.0, 2.0, 3.0, 4.0, 5.0, 6.0]

30秒到达战场

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

不负相思意

如果您不是运算符重载的忠实拥护者,或者不是更多的功能类型:// use flatMaplet result = [&nbsp; &nbsp; ["merge", "me"],&nbsp;&nbsp; &nbsp; ["We", "shall", "unite"],&nbsp; &nbsp; ["magic"]].flatMap { $0 }// Output: ["merge", "me", "We", "shall", "unite", "magic"]// ... or reduce[[1],[2],[3]].reduce([], +)// Output: [1, 2, 3]
打开App,查看更多内容
随时随地看视频慕课网APP