拆分NSArray到一个固定的大小和其余
答
基于the answer of Alex Reynolds:
你应该具有的3的长度的范围内,并与它的阵列的第一半,然后修改它的位置和长度,并创建所述阵列的第二个一半。
NSArray *firstThreeArray;
NSArray *otherArray;
NSRange threeRange;
threeRange.location = 0;
threeRange.length = 3;
firstThreeArray = [wholeArray subarrayWithRange:threeRange];
threeRange.location = threeRange.length;
threeRange.length = [wholeArray count] - threeRange.length;
otherArray = [wholeArray subarrayWithRange:threeRange];
答
由于NSArray
类别:
@implementation NSArray (NSArray_Slicing)
- (NSArray *)subarraysFromIndex:(int)index {
return @[[self sliceToIndex:index], [self sliceFromIndex:index]];
}
- (NSArray *)sliceFromIndex:(int)index {
NSMutableArray*mutArray = [self mutableCopy];
NSRange range = NSMakeRange(index, self.count - index);
return [mutArray subarrayWithRange:range];
}
- (NSArray *)sliceToIndex:(int)index {
NSMutableArray*mutArray = [self mutableCopy];
NSRange range = NSMakeRange(0, index);
return [mutArray subarrayWithRange:range];
}
@end
然后调用它:
NSArray *array = @[@1, @2, @3, @4, @5, @6, @7, @8, @9, @10, @11, @12];
NSLog(@"First three: %@", [array sliceToIndex:3]);
NSLog(@"Remaining: %@", [array sliceFromIndex:3]);
NSLog(@"Sliced: %@", [array subarraysFromIndex:3]);
NSLog(@"Original: %@", array);
+0
无需制作额外的副本。 'subarrayWithRange:'已经创建并返回一个新的数组。 –
+1
对于演示目的而言不是必需的,但我想为这些方法添加一些范围检查以避免异常。 –
什么如果,如果我的数组有元素的n个我怎样才能界定的范围第二个数组 –
如果数组有多于3个元素,则它已适用于每个数组。 – the4kman
它完美的工作 –