用另一个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]; }
享受编程!