使用特定的属性值对数组中的项数进行计数
我有一个Person()类:
class Person : NSObject { var firstName : String var lastName : String var imageFor : UIImage? var isManager : Bool? init (firstName : String, lastName: String, isManager : Bool) { self.firstName = firstName self.lastName = lastName self.isManager = isManager } }
我有一个Person()的数组
var peopleArray = [Person]()
我想要统计数组中的人数
isManager: true
我觉得这是在那里,但我不能find它,或findsearch参数。
谢谢。
使用filter
方法:
let managersCount = peopleArray.filter { (person : Person) -> Bool in return person.isManager! }.count
甚至更简单:
let moreCount = peopleArray.filter{ $0.isManager! }.count
你可以使用reduce
如下:
let count = peopleArray.reduce(0, combine: { (count: Int, instance: Person) -> Int in return count + (instance.isManager! ? 1 : 0) } )
或更紧凑的版本:
let count = peopleArray.reduce(0) { $0 + ($1.isManager! ? 1 : 0) }
reduce
将闭包(第二个参数)应用到数组的每个元素,将前一个元素(或初始值,即作为其第一个parameter passing的0
值)和当前数组元素的值传递给数组。 在闭包中,返回count
加0或1,具体取决于isManager属性是否为true
。
有关在标准库引用中 reduce
和filter
更多信息