Random Access (Collection) Memories
Mix things up in your collection classes with style and class (well, a category, but you get the idea).
I think we can all make a little more room in our hearts for NSEnumerator
, that fresh jam from 1995.
Random aside: did you know you can reverse an
NSArray
in a single line withNSEnumerator
?array.reverseObjectEnumerator.allObjects
. Boom.
Anyway, this is the best way to randomly step through the objects of an NSArray
, NSSet
, or NSOrderedSet
, as well as the keys and values of an NSDictionary
.
#import "TTTRandomizedEnumerator.h"
NSUInteger capacity = 100;
NSMutableArray *mutableNumbers = [NSMutableArray arrayWithCapacity:capacity];
for (NSUInteger i = 0; i < capacity; i++) {
[mutableNumbers addObject:@(i)];
}
// Classic `NSEnumerator` use with `while` loop
NSNumber *number = nil;
NSEnumerator *enumerator = [mutableNumbers randomizedObjectEnumerator];
while ((number = [enumerator nextObject])) {
NSLog(@"%@", number);
}
// `NSEnumerator` also conforms to `<NSFastEnumeration>`
for (NSNumber *number in [mutableNumbers randomizedObjectEnumerator]) {
NSLog(@"%@", number);
}
- (NSEnumerator *)randomizedObjectEnumerator;
- (NSEnumerator *)randomizedObjectEnumerator;
- (NSEnumerator *)randomizedObjectEnumerator;
- (NSEnumerator *)randomizedKeyEnumerator;
- (NSEnumerator *)randomizedObjectEnumerator;
Mattt Thompson
TTTRandomizedEnumerator is available under the MIT license. See the LICENSE file for more info.