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
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];
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);
Pas besoin de faire des copies supplémentaires. 'subarrayWithRange:' crée et retourne déjà un nouveau tableau. –
Pas nécessaire à des fins de démonstration, mais je voudrais ajouter une vérification de plage à ces méthodes pour éviter les exceptions. –
si, si mon tableau a n nombre d'éléments Comment définir la gamme de second tableau –
Cela fonctionne déjà avec chaque compte de tableau si le tableau a plus de 3 éléments. – the4kman
cela fonctionne parfaitement –