2011-09-14 8 views
0

私はウェブを見て、NSMutableArrayをソートする方法の1つがsortUsingSelector:を使用していることを知っています。しかし、私はちょうど何が行われる必要が正確に少し不安です。私はソートを行うために比較メソッドがNSOrderedAscendingまたはNSOrderedDescendingを返すはずですが、私はもう少し助けが必要であることを知っています。NSMutableArrayをuniqueIDを持つオブジェクトでソート

私はブロックオブジェクトの配列を持っています。各ブロックには1から200までの一意のIDがあります。 BlockオブジェクトのuniqueIDに基づいて配列をソートしたいと思います。これは可能ですか?

NSMutableArray *array = [[NSMutableArray alloc] init]; 
for (unsigned i = 0; i < 221; i++) { 
    Block *block = [[Block alloc] init]; 
    block.uniqueId = i; 
    [array addObject:block]; 
    [block release]; 
} 

、明らかにこの配列を初期化した後にソートされていますが、私は後でブロックを追加し、削除し、その後、アレイを訴えるしたいと思います。助けてください!

答えて

3

別のオプションはソート記述子を使用しています。それらはオブジェクト内のプロパティに基づいています。

NSArray* sorted =[array sortedArrayUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"uniqueId" ascending:YES]]]; 

か、ディスクリプタアレイに複数のNSSortDescriptorsを追加することにより、ソートの複数のレベルを指定することができます。このオプションを使用すると、別途

NSSortDescriptor* idDescriptor=[NSSortDescriptor sortDescriptorWithKey:@"uniqueID" ascending:YES] 
NSArray* descriptors=[NSArray arrayWithObject: idDescriptor]; 
NSArray* sortedArray=[array sortedArrayUsingDescriptors: descriptors]; 

それらを作成します。 あなたは、このような1行でそれを行うことができます。

+0

うわー、ありがとう。私はこれを試してみましょう! – RyJ

1
NSArray *sortedArray = [array sortedArrayUsingComparator:^(id o1, id o2) { 
    int id1 = ((Block *)o1).uniqueId; 
    int id2 = ((Block *)o2).uniqueId; 

    if (id1 == id2) { 
     return NSOrderedSame; 
    } 
    if (id1 < id2) { 
     return NSOrderedAscending; 
    } 
    return NSOrderedDescending; 
}]; 
関連する問題