2013-04-11 36 views
5

Tôi có 2 NSMutableArrays. Mảng đầu tiên chứa các đối tượng tùy chỉnh với thuộc tính NSString *itemID, mảng thứ hai chỉ chứa từ NSString đối tượng có cùng giá trị itemID, nhưng theo thứ tự khác. Tôi cần sắp xếp mảng đầu tiên bởi itemID thuộc tính của từng đối tượng và nó phải được sắp xếp như mảng thứ hai.Sắp xếp NSMutableArray với các đối tượng tùy chỉnh khác NSMutableArray

Tôi có thể làm như thế nào?

+0

mảng ngắn, dựa trên một khóa? –

+0

http://stackoverflow.com/questions/805547/how-to-sort-an-nsmutablearray-with-custom-objects-in-it/805589#805589 –

+0

Tôi đã xem giải pháp này và không phù hợp với câu hỏi –

Trả lời

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

Cảm ơn rất nhiều, đây là nó. –

+0

câu trả lời tuyệt vời ..... –

1

Store đối tượng tùy chỉnh trong một cuốn từ điển với itemID như chìa khóa, sử dụng từ điển này như tra cứu để sắp xếp các đối tượng:

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

EDIT: Giải pháp với loại inplace của 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 không thêm vào cuối danh sách. Vì vậy, nó sẽ không giúp đỡ –

+0

Tôi không nhận được bình luận của bạn. Tôi đơn giản xây dựng từ điển tra cứu để tránh tìm kiếm cho mỗi mục trong danh sách id được sắp xếp, mà sẽ trở nên rất tốn kém khi bạn có một số lượng lớn các mặt hàng. –

1

Bạn có thể so sánh hai đối tượng của mình bằng cú pháp sau: -

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

nếu không bạn có thể sử dụng đoạn mã sau:

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

Thưởng thức lập trình!

+1

Cảm ơn, đây cũng là câu trả lời làm việc –