如何对填充了我自己的对象的NSMutableArray进行排序

时间:2013-12-16 03:15:46

标签: ios objective-c sorting nsmutablearray nsobject

所以如果我有一个NSMutableArray,并且我用我定义的对象填充它,我该如何对它进行排序?每个对象都有“name”属性以及其他一些对象......

MyObject.h

@interface MyObject : NSObject 

@property (strong, nonatomic) NSString *name;

@end

现在我该如何根据MyObject的“name”属性的每个实例对NSMutableArray进行排序?

2 个答案:

答案 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方法并不是那么容易(据我所知)。