我该如何在Swift中连接或合并数组?

10 浏览
0 Comments

我该如何在Swift中连接或合并数组?

如果在 Swift 中创建了两个数组,如下所示:

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

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

admin 更改状态以发布 2023年5月20日
0
0 Comments

通过 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. 使用 Arrayappend(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. 使用SequenceflatMap(_:)方法将两个数组合并为一个新数组

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. 使用Sequencejoined()方法和Arrayinit(_ :) 初始化程序将两个数组合并为一个新数组

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. 使用 Arrayreduce(_:_:) 方法将两个数组合并为一个新数组

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]

0
0 Comments

你可以使用+来连接数组,形成新的数组

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]

0