如果在swift中创建了两个数组,就像这样:
var a:[CGFloat] = [1, 2, 3]
var b:[CGFloat] = [4, 5, 6]
如何将它们合并为[1,2,3,4,5,6]?
如果在swift中创建了两个数组,就像这样:
var a:[CGFloat] = [1, 2, 3]
var b:[CGFloat] = [4, 5, 6]
如何将它们合并为[1,2,3,4,5,6]?
当前回答
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]
为了完成可能的选项列表,可以使用reduce来实现flatten的行为:
var a = ["a", "b", "c"]
var b = ["d", "e", "f"]
let res = [a, b].reduce([],combine:+)
在这些方案中,最好的替代方案(性能/内存方面)是简单的扁平化,它只是惰性地包装原始数组,而不创建新的数组结构。
但是请注意flatten并不返回一个LazyCollection,因此懒惰行为不会沿着链传播到下一个操作(map、flatMap、filter等等)。
如果lazy在你的特定情况下是有意义的,只需要记住在flatten()前加上一个.lazy,例如,这样修改Tomasz sample:
let c = [a, b].lazy.flatten()
斯威夫特4。X
我知道的最简单的方法就是用+号
var Array1 = ["Item 1", "Item 2"]
var Array2 = ["Thing 1", "Thing 2"]
var Array3 = Array1 + Array2
// Array 3 will just be them combined :)
您可以用+连接数组,构建一个新数组
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 2.0以来,我最喜欢的方法是扁平化
var a:[CGFloat] = [1, 2, 3]
var b:[CGFloat] = [4, 5, 6]
let c = [a, b].flatten()
这将返回flatbidirectionalcollection,所以如果你只是想要一个CollectionType,这就足够了,你将有免费的懒惰求值。如果你确实需要数组,你可以这样做:
let c = Array([a, b].flatten())