![](/img/trans.png)
[英]Table View Number of Rows Function Not returning array items count correctly?
[英]Count number of items in an array with a specific property value
我有一個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
我覺得這是在那里,但我無法找到它,或找到搜索參數。
謝謝。
使用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
將閉包(第二個參數)應用於數組的每個元素,傳遞為前一個元素獲得的值(或初始值,即作為其第一個參數傳遞的0
值)和當前數組元素。 在閉包中,返回count
加零或一,取決於isManager屬性是否為true
。
有關標准庫參考中的reduce
和filter
更多信息
count(where:)
已從Xcode 10.2 beta 4中的Swift 5中刪除。
使用Swift 5和Xcode 10.2 beta 3,如果要計算數組中與給定謂詞匹配的元素數,可以使用Array
的count(where:)
方法。 count(where:)
具有以下聲明:
func count(where predicate: (Element) throws -> Bool) rethrows -> Int
返回序列中滿足給定謂詞的元素數。
以下Playground示例代碼顯示了如何使用count(where:)
:
struct Person {
let name: String
let isManager: Bool
}
let array = [
Person(name: "Jane", isManager: true),
Person(name: "Bob", isManager: false),
Person(name: "Joe", isManager: true),
Person(name: "Jill", isManager: true),
Person(name: "Ted", isManager: false)
]
let managerCount = array.count(where: { (person: Person) -> Bool in
return person.isManager == true
})
// let managerCount = array.count { $0.isManager } // also works
print(managerCount) // prints: 3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.