2013-04-11 7 views
5

私は2 NSMutableArraysを持っています。最初の配列には、プロパティNSString *itemIDのカスタムオブジェクトインテンシティが含まれ、2番目の配列には同じ値のitemIDを含むNSStringオブジェクトのみが含まれますが、別の順序です。私は各オブジェクトのitemIDプロパティによって最初の配列をソートする必要があり、それは2番目の配列のようにソートする必要があります。NSMutableArrayを別のNSMutableArrayでカスタムオブジェクトでソート

どうすればいいですか?

+0

配列は1つのキーに基づいて短いですか? –

+0

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

+0

私はこのソリューションを見てきました。質問 –

答えて

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

ありがとう、これはそれです。 –

+0

素晴らしい答え..... –

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

EDIT: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はリストの最後に追加しません。だからそれは助けにならないだろう –

+0

あなたのコメントを取得しないでください。シンプルなIDリストの各アイテムを検索することを避けるために、検索辞書を単純に構築します。これは、大量のアイテムを取得すると非常に高価になります。 –

1

次の構文を使用して、2つのオブジェクトを比較できます。 -

[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

ありがとう、これはまた働いている答え –

関連する問題