2013-04-11 31 views
5

Ich habe 2 NSMutableArrays. Das erste Array enthält benutzerdefinierte Objekt-Intanzen mit der Eigenschaft NSString *itemID, das zweite Array enthält nur NSString Objekte mit den gleichen Werten itemID, jedoch in einer anderen Reihenfolge. Ich muss das erste Array nach itemID Eigenschaft jedes Objekts sortieren, und es sollte wie zweites Array sortiert werden.Sortieren NSMutableArray mit benutzerdefinierten Objekten von einem anderen NSMutableArray

Wie kann ich das tun?

+0

Array ist kurz, basierend auf einem Schlüssel? –

+0

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

+0

Ich habe diese Lösung gesehen, und es ist nicht für meine geeignet Frage –

Antwort

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

Vielen Dank, das ist es. –

+0

große Antwort ..... –

1

Speichern Sie die benutzerdefinierten Objekte in einem Wörterbuch mit itemID als Schlüssel, um dieses Wörterbuch als Lookup verwenden, um die Objekte zu sortieren:

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: Lösung mit Inplace Art 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 fügt nicht am Ende der Liste. So würde es nicht helfen –

+0

Ich bekomme Ihren Kommentar nicht. Ich baue einfach Nachschlagwörterbücher auf, um zu vermeiden, dass Sie nach jedem einzelnen Artikel in der sortierten ID-Liste suchen, was sehr teuer wird, wenn Sie eine große Menge an Artikeln haben. –

1

Sie können Ihre zwei Objekte mit der folgenden Syntax vergleichen: -

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

oder sonst können Sie folgenden Ausschnitt verwenden:

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

Genießen Programmierung!

+1

Danke, das funktioniert auch Antwort –

Verwandte Themen