如果在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]?
当前回答
如果你正在处理大型序列,那么更有效的方法是使用Apple算法包中定义的链方法。
let n1 = [1, 2, 3]
let n2 = [4, 5, 6]
let allNumbers = chain(n1, n2)
for num in allNumbers {
print(num) // for loop prints 1 to 6
}
// Similarly for String type
let s = chain("foo", "BAR") // produces "fooBAR"
Chain相对于其他方法的优点:
允许混合不同的序列类型
let n = chain([10, 20, 30], 1...3) // will produce 10, 20, 30, 1, 2, 3
不进行新的内存分配
chain方法本质上迭代第一个序列,当它在第一个序列中遇到endIndex时,它就开始无缝地迭代第二个序列。
其他回答
如果你不喜欢操作符重载,或者更喜欢函数类型:
// 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]
不同数据类型的Marge数组:
var arrayInt = [Int]()
arrayInt.append(6)
var testArray = ["a",true,3,"b"] as [Any]
testArray.append(someInt)
输出:
["a", true, 3, "b", "hi", 3, [6]]
如果你想在一个特定的索引后面插入第二个数组,你可以这样做(从Swift 2.2开始):
let index = 1
if 0 ... a.count ~= index {
a[index..<index] = b[0..<b.count]
}
print(a) // [1.0, 4.0, 5.0, 6.0, 2.0, 3.0]
类似地,使用数组字典可以:
var dict1 = [String:[Int]]()
var dict2 = [String:[Int]]()
dict1["key"] = [1,2,3]
dict2["key"] = [4,5,6]
dict1["key"] = dict1["key"]! + dict2["key"]!
print(dict1["key"]!)
如果“key”匹配,则可以遍历dict1并添加dict2
如果你正在处理大型序列,那么更有效的方法是使用Apple算法包中定义的链方法。
let n1 = [1, 2, 3]
let n2 = [4, 5, 6]
let allNumbers = chain(n1, n2)
for num in allNumbers {
print(num) // for loop prints 1 to 6
}
// Similarly for String type
let s = chain("foo", "BAR") // produces "fooBAR"
Chain相对于其他方法的优点:
允许混合不同的序列类型
let n = chain([10, 20, 30], 1...3) // will produce 10, 20, 30, 1, 2, 3
不进行新的内存分配
chain方法本质上迭代第一个序列,当它在第一个序列中遇到endIndex时,它就开始无缝地迭代第二个序列。