1.25. Allocating and Making Use of Sets
Problem
You would like to store an array of objects but you don’t want any one object to appear more than once in the array.
Solution
Use sets instead of arrays.
Discussion
Sets are very similar to arrays. The big difference is that sets
allow objects to be added only once. The second time you try to add
the same object, it will be rejected by the set. We use NSSet for immutable and NSMutableSet for mutable sets. Let’s have a
look at an example of an immutable set:
NSString *hisName = @"Robert";
NSString *hisLastName = @"Kiyosaki";
NSString *herName = @"Kim";
NSString *herLastName = @"Kiyosaki";
NSSet *setOfNames = [[NSSet alloc] initWithObjects:
hisName,
hisLastName,
herName,
herLastName, nil];
NSLog(@"Set = %@", setOfNames);We created an immutable set and passed 4 string objects to its
initializer method. So let’s see what gets printed out to the console
window with our NSLog:
Set = {(
Kim,
Robert,
Kiyosaki
)}You can see that the last name
Kiyosaki was added only once to the list.
Our set rejected the second addition of the same object to the list.
It is very important to understand that a set
doesn’t just do a comparison on where in memory an object sits, but it
actually looks into its contents. hisLastName and herLastName are two separate variables, and
they will sit in two different places in the memory. Our set, however,
managed to understand that we are passing instances of NSString to it and did a comparison on the
contents of these strings ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access