Ordenar NSMutableArray con objects personalizados por otro NSMutableArray

Tengo 2 NSMutableArrays . La primera matriz contiene intancias de objects personalizadas con la propiedad NSString *itemID , la segunda matriz contiene solo objects NSString con los mismos valores de itemID , pero en otro order. Necesito orderar la primera matriz por la propiedad itemID de cada object, y debería orderarse como una segunda matriz.

¿Como puedo hacer esto?

 guideArray = < YOUR SECOND ARRAY WITH STRING OBJECT >; unsortedArray = < YOUR FIRST ARRAY WITH CUSTOM OBJECT >; [unsortedArray sortUsingComparator:^(id o1, id o2) { Items *item1 = o1; Items *item2 = o2; NSInteger idx1 = [guideArray indexOfObject:item1.ItemID]; NSInteger idx2 = [guideArray indexOfObject:item2.ItemID]; return idx1 - idx2; }]; NSLog(@"%@",unsortedArray); 

Guarde los objects personalizados en un dictionary con itemID como key, use este dictionary como búsqueda para orderar los objects:

  NSArray *objects; // your objects NSMutableArray *hintArray; // your sorted IDs NSMutableDictionary *lookupDict = [[NSMutableDictionary alloc] initWithCapacity:[objects count]]; NSMutableArray *sortedObjects = [[NSMutableArray alloc] initWithCapacity:[hintArray count]]; for (id object in objects) { [lookupDict setValue:object forKey:[object itemID]]; } for (id hint in hintArray) { [sortedObjects addObject:[lookupDict valueForKey:hint]]; } 

EDITAR: Solución con tipo de objects in situ:

  NSMutableArray *objects; NSMutableArray *hintArray; NSMutableDictionary *lookupDict = [[NSMutableDictionary alloc] initWithCapacity:[hintArray count]]; int i = 0; for (NSString *itemID in hintArray) { [lookupDict setValue:[NSNumber numberWithInt:i] forKey:itemID]; i++; } [objects sortUsingComparator:^NSComparisonResult(id obj1, id obj2) { return [[lookupDict valueForKey:[obj1 itemID]] compare:[lookupDict valueForKey:[obj2 itemID]]]; }]; 

Puedes comparar tus dos objects usando la siguiente syntax:

 [items sortUsingComparator:^NSComparisonResult(Attribute *obj1, Attribute *obj2) { return [[NSNumber numberWithInt:[stringOrder indexOfObject:obj1.itemID]] compare:[NSNumber numberWithInt:[stringOrder indexOfObject:obj2.itemID]]] }]; 

o bien, puede usar el siguiente fragment:

 NSArray* sortedKeys = [dict keysSortedByValueUsingComparator:^(id obj1, id obj2) { return [obj1 compareTo:obj2]; } 

¡Disfruta de la progtwigción!