所以如果我有一个NSMutableArray,并且我用我定义的对象填充它,我该如何对它进行排序?每个对象都有“name”属性以及其他一些对象......
MyObject.h
@interface MyObject : NSObject
@property (strong, nonatomic) NSString *name;
@end
现在我该如何根据MyObject的“name”属性的每个实例对NSMutableArray进行排序?
答案 0 :(得分:1)
在视图控制器(或其他类)中执行以下操作...
ViewController.h(你应该已经有了这个)
@interface ViewController : UIViewController
@property (strong, nonatomic) NSMutableArray *array;
@end
ViewController.m(将此行添加到要对“名称”进行排序的位置)
[array sortUsingDescriptors: [NSArray arrayWithObjects: [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES], nil]];
这将按MyObject的“name”属性的每个实例对数组进行排序。将“name”更改为其他属性,以便对不同的排序键产生相同的效果。
答案 1 :(得分:1)
如果您想按字母顺序对名称进行排序,那么这将是最简单的方法:
创建一个MyObject
方法,用于对对象进行排序。 compare:
是此类情况的常用方法名称。它应该采用与类相同类型的参数,并返回NSComparisonResult
。例如:
-(NSComparisonResult)compare:(MyObject*)obj;
由于我们希望基于属性比较这些对象,就像已经比较了该属性类型的对象一样,我们只能返回该比较的结果:
-(NSComparisonResult)compare:(MyObject*)obj {
return [self.name compare:obj.name];
}
既然这个方法已经到位,就像在包含它们的数组上调用sortUsingSelector:
一样简单:
[array sortUsingSelector:@selector(compare:)];
对于这种简单的compare:
方法,这种方法的优势并不容易看到,但您可以在compare:
方法中添加所需的逻辑。
例如,如果您有一个Person
类,其中包含出生日期,名字和姓氏,您可以先使用DOB排序compare:
方法,如果这些方法等效,按姓氏排序,如果你仍然得到相同的结果,则按名字等排序。使用NSSortDescriptor
方法并不是那么容易(据我所知)。