NSMutableArray sortUsingDescriptors

时间:2012-02-16 17:39:21

标签: objective-c ios cocoa-touch

我有NSMutableArray“days”,其中包含7个NSMutableArrays,7个NSMutableArrays包含类Lesson。

@interface Lesson : NSObject <NSCoding>{
    NSString *time1;
    NSString *time2;
    NSString *predmet;
    NSString *namPrepod;
    NSString *zamet;
} 

在我对sortedArrayUsingComparator进行排序之前,现在我必须与sortedArrayUsingDescriptors进行排序;

sortedArrayUsingComparator看起来像

chetNedel.sunday = [NSMutableArray arrayWithArray:[chetNedel.sunday sortedArrayUsingComparator:^(id cont1, id cont2) { return [[(Lesson *) cont1 time1] compare:[(Lesson *) cont2 time1]]; }]];
[chetNedel.days removeObjectAtIndex:0];
[chetNedel.days insertObject:chetNedel.sunday atIndex:0];

如何使用sortedArrayUsingDescriptors进行排序?

1 个答案:

答案 0 :(得分:3)

这是您要对要排序的NSMutableArray使用的方法。

- (void)sortUsingDescriptors:(NSArray *)sortDescriptors

因此,您希望对Lesson对象数组进行排序。 NSArray参数将是NSSortDescriptor个对象的数组。

NSSortDescriptor描述了您如何根据对象的属性对对象进行排序。因此,在对Lesson对象进行排序的情况下,您将对您拥有的部分或全部字符串属性进行排序。

这是Lesson对象的排序描述符,我们将在他们的time1属性上对它们进行排序。

NSSortDescriptor *time1Descriptor = [[NSSortDescriptor alloc] initWithKey:@"time1" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)];

关键参数是您要比较的对象属性(或者您可以使用time2,premedt等)。升序属性是一个布尔值,表示您是否希望以递增或递减的顺序返回已排序的值。 selector属性是一种用于比较对象属性的方法。

现在回到NSArray排序描述符。此时,您将开始构建排序描述符数组。

NSArray *sortDescriptorArray = [[NSArray alloc] initWithObjects:time1Descriptor, nil];

将这个排序描述符数组传递给原始方法:- (void)sortUsingDescriptors:(NSArray *)sortDescriptors

[myArrayOfLessions sortUsingDescriptors:sortDescriptorArray];

您的原始课程数据现已排序。