2013-04-11 157 views
5

我有2 NSMutableArrays。第一个数组包含具有属性NSString *itemID的自定义对象实例,第二个数组仅包含NSString对象,其值为itemID,但以其他顺序排列。我需要按照每个对象的itemID属性排序第一个数组,并且它应该像第二个数组一样排序。用另一个NSMutableArray对自定义对象排序NSMutableArray

我该怎么做?

+0

array is short,based on one key? – 2013-04-11 08:53:46

+0

http://stackoverflow.com/questions/805547/how-to-sort-an-nsmutablearray-with-custom-objects-in-it/805589#805589 – 2013-04-11 09:00:31

+0

我见过这个解决方案,它不适合我问题 – 2013-04-11 09:18:21

回答

3
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); 
+0

非常感谢,就是这样。 – 2013-04-11 08:56:57

+0

很棒的答案..... – 2013-04-11 09:06:29

1

存储在字典中的自定义对象与itemID为重点,用这个字典作为查找的对象进行排序:

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

编辑: 解决方案与就地排序objects

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

NSDictionary不会添加到列表的末尾。所以它不会帮助 – 2013-04-11 08:47:07

+0

我没有得到您的评论。我使用简单的构建查找字典来避免搜索排序后的id列表中的每个项目,当您获得大量项目时这将变得非常昂贵。 – 2013-04-11 08:51:23

1

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

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

欣赏节目!

+1

谢谢,这也是可行的答案 – 2013-04-11 08:57:16

相关问题