J'ai un NSArray, et je veux le diviser en deux parties égales (si impair "compter" alors ajouter au dernier nouveau tableau) - je veux le diviser "vers le milieu" pour ainsi dire.Comment diviser un NSArray en deux parties égales?
Le code suivant fait exactement ce que je veux, mais est-il une meilleure façon ?:
// NOTE: `NSArray testableArray` is an NSArray of objects from a class defined elsewhere;
NSMutableArray *leftArray = [[NSMutableArray alloc] init];
NSMutableArray *rightArray = [[NSMutableArray alloc] init];
for (int i=0; i < [testableArray count]; i=i+1) {
if (i < [testableArray count]/2) {
[leftArray addObject:[testableArray objectAtIndex:i]];
}
else {
[rightArray addObject:[testableArray objectAtIndex:i]];
}
}
Une fois leftArray et rightArray sont faits, je ne vais pas les changer, donc ils ne pas besoin d'être « mutable ". Je pense qu'il peut y avoir un moyen d'accomplir le code ci-dessus avec la méthode ObjectsAtIndexes ou une méthode de dénombrement rapide ?, mais je ne peux pas obtenir le code suivant au travail (ou d'autres variations):
NSArray *leftArray = [[NSArray alloc] initWithObjects:[testableArray objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(????, ????)]]];
NSArray *rightArray = [[NSArray alloc] initWithObjects:[testableArray objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(????, ????)]]];
Est-ce que quelqu'un sait si je vais-je dans la bonne direction avec ceci ou pointez-moi dans la bonne direction?
Merci!
Alex, merci pour votre réponse (s) ultra-rapide! Votre deuxième solution est beaucoup mieux. Je pense que je me suis trop accroché à l'implémentation de NSRange, que vous avez également tracée très clairement dans l'exemple ci-dessus! –
il y a un bug ici. Il n'y a pas besoin de +1. Exemple: un tableau de 6 éléments. la première NSRange devrait être {0, 3} la seconde NSRange devrait être {3, 3}. Dans votre cas, vous obtiendrez une exception car la deuxième plage serait hors limites {4, 3}. –
Merci, Stas. J'ai corrigé ce code. –