que tienen un NSArray, y quiero dividirlo en dos partes iguales (si es impar "recuento" y luego añadir a éste nuevo array) - Quiero dividirlo "por la mitad" por así decirlo.¿Cómo dividir un NSArray en dos partes iguales?
El siguiente código hace exactamente lo que quiero, pero hay una manera mejor ?:
// 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]];
}
}
Una vez que se hacen leftArray y rightArray, no voy a cambiar, por lo que no tiene por qué ser "mutable ". Creo que puede ser una manera de lograr el código anterior con el método ObjectsAtIndexes o algún método de enumeración rápida ?, pero no puedo obtener el código siguiente al trabajo (u otras variantes):
NSArray *leftArray = [[NSArray alloc] initWithObjects:[testableArray objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(????, ????)]]];
NSArray *rightArray = [[NSArray alloc] initWithObjects:[testableArray objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(????, ????)]]];
¿Alguien sabe si ¿Voy en la dirección correcta con esto o me señalas en la dirección correcta?
Gracias!
Alex, ¡gracias por tu (s) respuesta (s) ultra rápida (s)! Su segunda solución es mucho mejor. Creo que me obsesioné mucho con la implementación de NSRange, que también expusiste muy claramente en el ejemplo anterior. –
hay un error aquí. No hay necesidad de +1. Ejemplo: una matriz de 6 elementos. el primer NSRange debe ser {0, 3} el segundo NSRange debe ser {3, 3}. En su caso, obtendrá una excepción porque el segundo rango estaría fuera de los límites {4, 3}. –
Gracias, Stas. Arreglé este código –