Swift - 如何计算特定值数组中的项?

时间:2017-06-27 15:22:29

标签: arrays swift count

我有一个包含200个项目的数组。这些都是真或假:

let shouldMascotChangeVotes: [Bool] = [false, false, false, true, false, true, true, true, false, true, true, true, true, false, true, true, false, true, true, true, false, true, true, true, true, true, true, true, false, true, false, true, false, true, true, false, false, true, true, false, false, true, true, true, false, true, false, true, true, false, true, true, false, true, false, false, true, false, true, true, false, false, true, false, true, true, true, false, true, true, false, false, true, false, true, true, false, false, false, true, false, true, true, false, true, true, true, true, true, true, true, false, true, false, true, false, true, true, true, true, true, true, true, false, true, true, false, true, true, true, true, true, true, true, false, true, true, false, true, true, false, true, true, true, true, true, false, false, false, false, true, true, true, false, true, true, false, false, true, false, false, true, true, true, true, false, true, true, true, true, false, true, true, false, true, false, false, true, true, false, true, false, false, false, true, false, false, false, true, false, true, true, false, true, true, false, true, true, true, false, false, false, true, false, true, false, true, true, true, true, false, true, false, false, true, true, true, true, true, false]

我知道如何计算数组中的总项数,但我需要能够只计算数组中的true或false值。我该怎么做?

shouldMascotChangeVotes.count // returns 200

3 个答案:

答案 0 :(得分:2)

shouldMascotChangeVotes.filter{$0 == true}.count

您可以先过滤它然后再计算。

答案 1 :(得分:1)

我不确定实际表现对你有多重要,但你可以做到这一点。

import UIKit

let shouldMascotChangeVotes: [Bool] = [false, false, false, true, false, true, true, true, false, true, true, true, true, false, true, true, false, true, true, true, false, true, true, true, true, true, true, true, false, true, false, true, false, true, true, false, false, true, true, false, false, true, true, true, false, true, false, true, true, false, true, true, false, true, false, false, true, false, true, true, false, false, true, false, true, true, true, false, true, true, false, false, true, false, true, true, false, false, false, true, false, true, true, false, true, true, true, true, true, true, true, false, true, false, true, false, true, true, true, true, true, true, true, false, true, true, false, true, true, true, true, true, true, true, false, true, true, false, true, true, false, true, true, true, true, true, false, false, false, false, true, true, true, false, true, true, false, false, true, false, false, true, true, true, true, false, true, true, true, true, false, true, true, false, true, false, false, true, true, false, true, false, false, false, true, false, false, false, true, false, true, true, false, true, true, false, true, true, true, false, false, false, true, false, true, false, true, true, true, true, false, true, false, false, true, true, true, true, true, false]

let countableSet = NSCountedSet()

shouldMascotChangeVotes.forEach { (item: Bool) in
    countableSet.add(item)
}

debugPrint(countableSet.count(for: true)) // 125
debugPrint(countableSet.count(for: false)) // 75

注意:也许不是最有效的解决方案,但它可以完成工作;该片段直接来自Playground。

答案 2 :(得分:1)

您也可以尝试使用reduce()。为了演示目的,我做了两次。你实际上可以使用总计数并做出改变。

let shouldMascotChangeVotes: [Bool] = [false, false, false, true, false, true, true, true, false, true, true, true, true, false, true, true, false, true, true, true, false, true, true, true, true, true, true, true, false, true, false, true, false, true, true, false, false, true, true, false, false, true, true, true, false, true, false, true, true, false, true, true, false, true, false, false, true, false, true, true, false, false, true, false, true, true, true, false, true, true, false, false, true, false, true, true, false, false, false, true, false, true, true, false, true, true, true, true, true, true, true, false, true, false, true, false, true, true, true, true, true, true, true, false, true, true, false, true, true, true, true, true, true, true, false, true, true, false, true, true, false, true, true, true, true, true, false, false, false, false, true, true, true, false, true, true, false, false, true, false, false, true, true, true, true, false, true, true, true, true, false, true, true, false, true, false, false, true, true, false, true, false, false, false, true, false, false, false, true, false, true, true, false, true, true, false, true, true, true, false, false, false, true, false, true, false, true, true, true, true, false, true, false, false, true, true, true, true, true, false]

var trueFalseCount: (trues: Int, falses: Int)

trueFalseCount.trues = shouldMascotChangeVotes.reduce(0) { $0 + ($1 ? 1 : 0) }
trueFalseCount.falses = shouldMascotChangeVotes.reduce(0) { $0 + ($1 ? 0 : 1) }

print(trueFalseCount) // (trues: 125, falses: 75)