如果有两个数组在swift中创建,如下所示:
var a:[CGFloat] = [1, 2, 3]
var b:[CGFloat] = [4, 5, 6]
如何将它们合并为< code>[1,2,3,4,5,6]?
如果您不太喜欢运算符重载,或者更喜欢函数类型:
// 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]
使用Swift 5,根据您的需要,您可以选择以下六种方式之一来连接/合并两个阵列。
Array
有一个(_:_:)
通用运算符。(_:_:)
有以下声明:
通过串联集合和序列的元素来创建新的集合。
static func + <Other>(lhs: Array<Element>, rhs: Other) -> Array<Element> where Other : Sequence, Self.Element == Other.Element
下面的示例代码显示了如何使用(_:_:)
泛型运算符将两个[Int]
let array1 = [1, 2, 3]
let array2 = [4, 5, 6]
let flattenArray = array1 + array2
print(flattenArray) // prints [1, 2, 3, 4, 5, 6]
< code >数组
有一个< code> =(_:_:)通用运算符。< code> =(_:_:)具有以下声明:
将序列的元素追加到可替换范围的集合中。
static func += <Other>(lhs: inout Array<Element>, rhs: Other) where Other : Sequence, Self.Element == Other.Element
下面的示例代码显示了如何使用=(_:_:)
泛型运算符将[Int]
var array1 = [1, 2, 3]
let array2 = [4, 5, 6]
array1 += array2
print(array1) // prints [1, 2, 3, 4, 5, 6]
Swift
方法。< code>append(contentsOf:)具有以下声明:Array
有一个< code>append(contentsOf:)
将序列或集合的元素添加到此集合的末尾。
mutating func append<S>(contentsOf newElements: S) where S : Sequence, Self.Element == S.Element
以下Playground示例代码显示了如何使用< code>append(contentsOf:)方法将一个数组追加到另一个< code>[Int]类型的数组:
var array1 = [1, 2, 3]
let array2 = [4, 5, 6]
array1.append(contentsOf: array2)
print(array1) // prints [1, 2, 3, 4, 5, 6]
Swift为符合序列
协议的所有类型(包括阵列
)提供了一种平面图(_:)
)方法flatMap(_:)
具有以下声明:
返回一个数组,其中包含使用此序列的每个元素调用给定转换的串联结果。
func flatMap<SegmentOfResult>(_ transform: (Self.Element) throws -> SegmentOfResult) rethrows -> [SegmentOfResult.Element] where SegmentOfResult : Sequence
下面的Playground示例代码展示了如何使用平面地图(_:)
方法将[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]
Swift为所有符合Sequence
协议(包括Array
)的类型提供了一个加入()
方法。加入()
有以下声明:
返回这个序列的元素。
func joined() -> FlattenSequence<Self>
此外,Swift Array
有一个 init(_:) 初始
值设定项。init(_:)
具有以下声明:
创建包含序列元素的数组。
init<S>(_ s: S) where Element == S.Element, S : Sequence
因此,下面的示例代码展示了如何使用<code>joined()</code>方法和<code>init(_:)</code>初始值设定项将<code>[Int]类型的两个数组合并成一个新数组:
let array1 = [1, 2, 3]
let array2 = [4, 5, 6]
let flattenCollection = [array1, array2].joined() // type: FlattenBidirectionalCollection<[Array<Int>]>
let flattenArray = Array(flattenhtml" target="_blank">Collection)
print(flattenArray) // prints [1, 2, 3, 4, 5, 6]
SwiftArray
有一个减少(_:_:)
方法。减少(_:_:)
有以下声明:
返回使用给定闭包组合序列元素的结果。
func reduce<Result>(_ initialResult: Result, _ nextPartialResult: (Result, Element) throws -> Result) rethrows -> Result
下面的Playground代码演示了如何使用duce(_:_:)
方法将[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]
您可以将数组与<code></code>连接起来,构建一个新数组
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]
问题内容: 如果有两个这样迅速创建的数组: 如何将它们合并到? 问题答案: 您可以使用串联数组,以建立新数组 或使用(或)将一个数组附加到另一个数组:
问题内容: 我有两个数组。 我需要合并这些数组,并在下拉列表中显示为 我怎么能使用swift.im新手来快速获得此结果,有人可以帮忙吗? 问题答案: 压缩数组并连接结果:
问题内容: 如何在Swift中连接字符串? 在我们喜欢 要么 但是我想用Swift语言做到这一点。 问题答案: 您可以通过多种方式连接字符串: 您也可以这样做: 我相信还有更多方法。 描述位 创建一个常数。(有点像)。设置后就无法更改其值。您仍然可以将其添加到其他东西并创建新变量。 创建一个变量。(有点像),因此您可以更改其值。 注意 在现实中,并有 很大的不同 ,从和,但它可以帮助类比。
问题内容: 您好,我想基于数组中的唯一项合并数组。 我拥有的对象 在这个totalCells数组中,我有几个这样的对象 现在,我想制作一个数组,在该数组中我可以基于lineNumber进行数组组合。 就像我有一个具有lineNumber属性和cellWidth集合的对象。我可以这样做吗? 我可以遍历每一行并检查行号是否相同,然后按该单元格宽度。有什么办法我可以算吗? 我正在尝试获得这样的输出。 问
问题内容: 如何使用将一个附加到另一个? 我正在使用图书馆发送到。 字典1 字典2 如何将两个字典结合在一起,制作一个新字典,如下所示? 我已经尝试过,但是出现了编译错误: 二进制运算符’+ =’不能应用于两个’[String:AnyObject]’操作数 问题答案: 请参阅很棒的Dollar&Cent项目 https://github.com/ankurp/Cent/blob/master/So
我有以下两个Spark数据帧: 任何PySpark、SQL和HiveContext都可以提供帮助。