2017-09-13 68 views

回答

1

基於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

它完美的工作 –

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

對於演示目的而言不是必需的,但我想爲這些方法添加一些範圍檢查以避免異常。 –

相關問題