2017-09-13 13 views
0

J'ai un NSArray dans mon projet qui a près de 12 éléments. Je veux diviser ce tableau en deux tableaux. Je veux les 3 premiers éléments dans le premier tableau et le reste des éléments dans la seconde NSArray.Split un NSArray dans une taille fixe et le reste

Répondre

1

Basé sur the answer of Alex Reynolds:

Vous devriez faire une gamme qui a la longueur de 3 et de faire la première moitié du tableau avec elle, puis modifiez son emplacement et de la longueur et de créer la seconde moitié du tableau.

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

si, si mon tableau a n nombre d'éléments Comment définir la gamme de second tableau –

+0

Cela fonctionne déjà avec chaque compte de tableau si le tableau a plus de 3 éléments. – the4kman

+0

cela fonctionne parfaitement –

0

En tant que catégorie de 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 

Et puis l'appeler:

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

Pas besoin de faire des copies supplémentaires. 'subarrayWithRange:' crée et retourne déjà un nouveau tableau. –

+1

Pas nécessaire à des fins de démonstration, mais je voudrais ajouter une vérification de plage à ces méthodes pour éviter les exceptions. –