拆分NSArray到一个固定的大小和其余

问题描述:

我有一个NSArray在我的项目中有近12个元素。我想将这个数组分成2个数组。我想要第一个数组中的前3个元素和第二个NSArray中的其余元素。拆分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]; 
+0

什么如果,如果我的数组有元素的n个我怎样才能界定的范围第二个数组 –

+0

如果数组有多于3个元素,则它已适用于每个数组。 – the4kman

+0

它完美的工作 –

由于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

对于演示目的而言不是必需的,但我想为这些方法添加一些范围检查以避免异常。 –