NEW: Nominations are now open for the 2019 Swift Community Awards! >>

How to count objects in a set using NSCountedSet

Swift version: 5.1

Paul Hudson    @twostraws   

One of my favorite little gems in Cocoa Touch is called NSCountedSet, and it's the most efficient way to count objects in a set. Here's the code:

let set = NSCountedSet()
set.add("Bob")
set.add("Charlotte")
set.add("John")
set.add("Bob")
set.add("James")
set.add("Sophie")
set.add("Bob")

print(set.count(for: "Bob"))

Now to how it works: a set is like an array, except each item can appear only once. If we used an array in the above code, it would contain seven objects: three Bobs, one Charlotte, one John, one James and one Sophie. If we used a Swift set in the above code, it would contain four objects: one Bob, one Charlotte, one John, one James and one Sophie – the set ensures each item appears only once.

Now for the twist: NSCountedSet works similar to a set insofar as each object can appear only once, but it keeps track of how many times each item was added and removed. So, our counted set will have four objects in (like it would if it were a regular set), but NSCountedSet has a count(for:) method that will report back that Bob was added three times.

SAVE 20% ON iOS CONF SG The largest iOS conference in Southeast Asia is back in Singapore for the 5th time in January 2020, now with two days of workshops plus two days of talks on SwiftUI, Combine, GraphQL, and more! Save a massive 20% on your tickets by clicking on this link.

Available from iOS 2.0

Similar solutions…

About the Swift Knowledge Base

This is part of the Swift Knowledge Base, a free, searchable collection of solutions for common iOS questions.

MASTER SWIFT NOW
Buy Testing Swift Buy Practical iOS 12 Buy Pro Swift Buy Swift Design Patterns Buy Swift Coding Challenges Buy Server-Side Swift (Vapor Edition) Buy Server-Side Swift (Kitura Edition) Buy Hacking with macOS Buy Advanced iOS Volume One Buy Advanced iOS Volume Two Buy Hacking with watchOS Buy Hacking with tvOS Buy Hacking with Swift Buy Dive Into SpriteKit Buy Swift in Sixty Seconds Buy Objective-C for Swift Developers Buy Beyond Code

Was this page useful? Let us know!

Average rating: 4.5/5