Skip to content

Instantly share code, notes, and snippets.

@mikeash
Created July 9, 2012 21:15
Show Gist options
  • Star 41 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
  • Save mikeash/3078976 to your computer and use it in GitHub Desktop.
Save mikeash/3078976 to your computer and use it in GitHub Desktop.
Cocoa array slicing
// clang -framework Foundation -fobjc-arc -O3 test.m
#import <Foundation/Foundation.h>
@interface Slice : NSObject
@property NSInteger start;
@property NSInteger length;
@end
@implementation Slice
@end
@interface NSNumber (SliceCreation)
- (Slice *): (NSInteger)length;
@end
@implementation NSNumber (SliceCreation)
- (Slice *): (NSInteger)length
{
Slice *slice = [[Slice alloc] init];
[slice setStart: [self integerValue]];
[slice setLength: length];
return slice;
}
@end
@interface NSArray (Slicing)
- (id)objectForKeyedSubscript: (id)subscript;
@end
@implementation NSArray (slicing)
- (id)objectForKeyedSubscript: (id)subscript
{
Slice *slice = subscript;
return [self subarrayWithRange: NSMakeRange([slice start], [slice length])];
}
@end
int main(int argc, char **argv)
{
@autoreleasepool
{
NSMutableArray *array = [NSMutableArray array];
for(int i = 0; i < 100; i++)
[array addObject: @(i * i)];
NSArray *sliced = array[[@5:8]];
NSLog(@"%@", sliced);
}
}
// 2012-07-09 17:15:12.705 a.out[84967:707] (
// 25,
// 36,
// 49,
// 64,
// 81,
// 100,
// 121,
// 144
// )
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment