Skip to content

Instantly share code, notes, and snippets.

@mpvosseller
Last active December 25, 2015 11:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mpvosseller/6969154 to your computer and use it in GitHub Desktop.
Save mpvosseller/6969154 to your computer and use it in GitHub Desktop.
Category on an NSArray to return n random elements.
@interface NSArray (MPV)
- (NSArray*) mpv_randomElements:(NSUInteger)maxElements;
@end
@implementation NSArray (MPV)
- (NSArray*) mpv_randomElements:(NSUInteger)maxElements {
NSUInteger numElementsToPick = MIN(self.count, maxElements);
NSMutableArray *outArray = [NSMutableArray arrayWithCapacity:numElementsToPick];
NSMutableArray *srcArray = [self mutableCopy];
while (outArray.count < numElementsToPick) {
NSUInteger randomIndex = arc4random() % srcArray.count;
id randomObject = srcArray[randomIndex];
[outArray addObject:randomObject];
srcArray[randomIndex] = [srcArray lastObject];
[srcArray removeLastObject];
}
return outArray;
}
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment