一般排序:
NSArray *array1 = [NSArray arrayWithObjects:@"11",@"2",@"13",@"19",@"21",@"7", nil];
NSArray *array2 =[array1 sortedArrayUsingSelector:@selector(compareNumber:)];
如果要比较数字的话就要给NSString写个类目:
- (NSComparisonResult)compareNumber:(NSString *)string{
//这个方法怎么索引不出来
// return [self compare:string options:NSNumericSearch];
int a = [self intValue];
int b = [string intValue];
if (a == b) {
return NSOrderedSame;
}else if(a > b){
return NSOrderedDescending;
}else {
return NSOrderedAscending;
}
}
如果只是比较字符串排序的话就用compare:(要区分大小写)
caseInsensitiveCompare:不区分大小写排序
block排序:主要用于不重写排序方法的同时可以对里面的数据进行升序列排序或者降序列排序
NSArray *array10 = [array1 sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
// return [obj1 compareNumber:obj2]; //升
return [obj2 compareNumber:obj1]; //降
}];
自定义对象排序:
如:学生年龄
需要在学生类里面写排序方法
- (NSComparisonResult)studentAgeCompare:(Student *)student{
if (_age == student.age) {
return NSOrderedSame;
}if (_age > student.age) {
return NSOrderedDescending;
}else{
return NSOrderedAscending;
}
}
排序嵌套:(按名字排序,名字相同排年龄)
- (NSComparisonResult)teacherCompareAge:(Teacher *)teacher{
if ([_name compare:teacher.name] == 0) {
if (_age == teacher.age) {
return NSOrderedSame;
}else if (_age > teacher.age){
return NSOrderedDescending;
}else{
return NSOrderedAscending;
}
}else if ([_name compare:teacher.name] > 0){
return NSOrderedDescending;
}else{
return NSOrderedAscending;
}
}
多种对象类型集合排序
如:将老师和学生的年龄排序使用协议:
@protocol Personinfo <NSObject>
@property (nonatomic,assign) NSInteger age;
@end
老师和学生遵守协议
排序方法:(老师和学生都有)
- (NSComparisonResult)compareAge:(id<Personinfo>)object{
if (_age == [object age]) {
return NSOrderedSame;
}else if (_age > [object age]){
return NSOrderedDescending;
}else{
return NSOrderedAscending;
}
}
总结:一般常用的排序总结在这里了,以后遇到新的再添加。