用另一个NSMutableArray对自定义对象sortingNSMutableArray

我有2个NSMutableArrays 。 第一个数组包含具有属性NSString *itemID自定义对象实例,第二个数组仅包含具有相同itemID值的NSString对象,但是以其他顺序包含。 我需要通过每个对象的itemID属性sorting第一个数组,它应该像第二个数组sorting。

我怎么能做到这一点?

 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); 

将自定义对象存储在以itemID为关键字的字典中,使用此字典作为查找来sorting对象:

  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]]; } 

编辑:与就地sortingobjects解决scheme:

  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]]]; }]; 

您可以使用以下语法比较两个对象: –

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

否则你可以使用下面的代码片段:

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

享受编程!