当前位置:  开发笔记 > IOS > 正文

计算数组数组中的项目?

如何解决《计算数组数组中的项目?》经验,为你挑选了2个好方法。

如果我有一个声明为的对象

let compoundArray = [Array]

是否有一个属性可以给我在compoundArray中包含的所有数组中的字符串数?

我可以通过在每个数组中添加所有项目来实现:

var totalCount = 0
for array in compoundArray {
   totalCount += array.count }
//totalCount = total items in all arrays within compoundArray

但这似乎很笨拙,看起来swift会有一个Array的属性/方法来做到这一点,不是吗?

谢谢!



1> Nirav D..:

你可以使用joinedflatMap为此.

运用 joined

let count = compoundArray.joined().count

运用 flatMap

let count = compoundArray.flatMap({$0}).count


在这两种方法中,`joined`可能更好,因为它在flattened集合上返回一个"view",而`flatMap`创建一个新数组.

2> Martin R..:

您可以使用添加嵌套数组计数

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
}

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有