web-dev-qa-db-ja.com

NSSetからのNSArray-自分で並べ替える必要がありますか?

NSSetにデータがあり、それをNSArrayに取得する必要があります。

自分でソートする必要がありますか?

32
Jeff

NSFetchRequestプロパティをsortDescriptorssの配列に設定することにより、NSSortDescriptorでデータを取得するときにソートを指定できます。ただし、すでにNSSetにあり、別のフェッチリクエストを行いたくない場合は、次のコマンドを使用できます。

[[theSet allObjects] sortedArrayUsingDescriptors:sortDescriptors];

NSArrayを呼び出したときに暫定的なallObjectsが作成され、その後、別の並べ替えられた配列が作成されるため、100%効率的ではありませんが、適度なサイズのデータ​​セットのオーバーヘッドは無視できます(もちろんソートのコストよりも少ない)。

編集する

実際、私は間違っていました-NSSetにはsortedArrayUsingDescriptors:メソッドも。したがって、[theSet sortedArrayUsingDescriptors:descriptors]そして、すべてを一度に実行します。

77
Ian Henry

自分で分類する必要がありますが、それほど難しくはありません...

NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Sprocket" inManagedObjectContext:managedObjectContext];
[request setEntity:entity];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"sortVariable" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];   
[request setSortDescriptors:sortDescriptors];

NSError *error;
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];    
self.sprocketArray = mutableFetchResults;

[sortDescriptors release];
[sortDescriptor release];
[mutableFetchResults release];
[request release];
8
blindjesse