如果我有一个声明为的对象
let compoundArray = [Array]
是否有一个属性可以给我在compoundArray中包含的所有数组中的字符串数?
我可以通过在每个数组中添加所有项目来实现:
var totalCount = 0 for array in compoundArray { totalCount += array.count } //totalCount = total items in all arrays within compoundArray
但这似乎很笨拙,看起来swift会有一个Array的属性/方法来做到这一点,不是吗?
谢谢!
你可以使用joined
或flatMap
为此.
运用 joined
let count = compoundArray.joined().count
运用 flatMap
let count = compoundArray.flatMap({$0}).count
您可以使用添加嵌套数组计数
let count = compoundArray.reduce(0) { $0 + $1.count }
大型阵列的性能比较(在发布配置中在MacBook Pro上编译和运行):
let N = 20_000 let compoundArray = Array(repeating: Array(repeating: "String", count: N), count: N) do { let start = Date() let count = compoundArray.joined().count let end = Date() print(end.timeIntervalSince(start)) // 0.729196012020111 } do { let start = Date() let count = compoundArray.flatMap({$0}).count let end = Date() print(end.timeIntervalSince(start)) // 29.841913998127 } do { let start = Date() let count = compoundArray.reduce(0) { $0 + $1.count } let end = Date() print(end.timeIntervalSince(start)) // 0.000432014465332031 }