使用特定的属性值对数组中的项数进行计数

我有一个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

有关在标准库引用中 reducefilter更多信息