escribí un método rápido para tomar una matriz de origen (de los objetos que se encuentran todos fuera de servicio) y una matriz de referencia (que tiene los objetos de una deseada (y totalmente arbitraria) orden), y devuelve una matriz donde los elementos de la matriz de origen se han reorganizado para que coincida con la matriz de referencia.
- (NSArray *) reorderArray:(NSArray *)sourceArray toArray:(NSArray *)referenceArray
{
NSMutableArray *returnArray = [[NSMutableArray alloc] init];
for (int i = 0; i < [referenceArray count]; i++)
{
if ([sourceArray containsObject:[referenceArray objectAtIndex:i]])
{
[returnArray addObject:[arrReference objectAtIndex:i]];
}
}
return [returnArray copy];
}
Tenga en cuenta que esto es muy frágil. Utiliza el método NSArray
containsObject:
, que finalmente llamará al NSObject
's isEqual:
. Básicamente, debería funcionar muy bien para matrices de NSString
s, NSNumber
s, y tal vez NSDate
s (aún no lo han probado), pero fuera de eso, YMMV. Imagino que si intentas pasar arreglos de UITableViewCell
u otro objeto realmente complejo, se dañaría por completo y se bloqueará o devolverá la basura total. Del mismo modo, si hiciera algo así como pasar una matriz de NSDate
s como la matriz de referencia y una matriz de NSString
s como la matriz de origen. Además, si la matriz fuente contiene elementos que no están cubiertos en la matriz de referencia, simplemente se descartarán. Uno podría abordar algunos de estos problemas agregando un pequeño código adicional.
Dicho todo esto, si está tratando de hacer algo simple, debería funcionar bien. En su caso, podría construir la matriz de referencia mientras recorre su setValue:forKey:
.
NSMutableArray *referenceArray = [[NSMutableArray alloc] init];
NSMutableDictionary *yourDictionary = [[ NSMutableDictionary alloc] init];
for (//whatever you are looping through here)
{
[yourDictionary setValue://whatever forKey:key];
[referenceArray addObject:key];
}
Entonces, cuando se desea un bucle sobre los elementos en el orden en que entró, que acaba de
for (NSString *key in [self reorderArray:[myDict allKeys] toArray:referenceArray])
Las claves no son fijas, son dinámicas. – Matrix