您的位置:首页 > 其它

使用sortedArrayUsingSelector:方法排序数组中的元素

2014-07-18 07:53 836 查看
一、实例方法

- (NSArray *)sortedArrayUsingSelector:(SEL)comparator;

返回一个数组,并通过给定的比较方法来接收排序后的元素。

新的数组的数组包含对接收数组的元素,而不是复制它们的副本。

- (NSComparisonResult)compare:(NSNumber *)decimalNumber;

// compare two NSDecimalNumbers

其中NSComparisonResult是一个枚举类型,它有三个参数,如下:

enum {

NSOrderedAscend= -1,

NSOrderedSame,

NSOrderedDescending

};

typedef NSInteger NSComparisonResult;

这些枚举常量被用来指示如何对请求的对象进行排序。

NSOrderedAscending 表示升序

NSOrderedDescending 表示降序

二、示例代码
创建一个sort类用来声明属性和方法。
main.m头文件如下:

//  main.m

#import <Foundation/Foundation.h>
#import "sort.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {

// 创建三个sort对象
sort *sort1 = [sort sortAlloc];
sort *sort2 = [sort sortAlloc];
sort *sort3 = [sort sortAlloc];

// 分别设置三个对象的name
sort1.name = @"one1";
sort2.name = @"age2";
sort3.name = @"hhh3";

// 将三个对象添加到array1数组中
NSArray *array1 = [NSArray arrayWithObjects:sort1, sort2, sort3, nil];

// sortedArrayUsingSelector:调用myCompare:方法来对array1进行排序
NSArray *array2 = [array1 sortedArrayUsingSelector:@selector(myCompare:)];

// 循环打印array2中排好序的元素
for (sort *sort4 in array2) {
NSLog(@"%@", sort4.name);
}

////////////////////////////////////

sort *sort5 = [sort sortAlloc];
sort *sort6 = [sort sortAlloc];
sort *sort7 = [sort sortAlloc];

sort5.number = 20;
sort6.number = 10;
sort7.number = 30;

NSArray *array3 = [NSArray arrayWithObjects:sort5, sort6, sort7, nil];

NSArray *array4 = [array3 sortedArrayUsingSelector:@selector(compare:)];

for (sort *sort8 in array4) {
NSLog(@"%d", sort8.number);
}
}
return 0;
}


sort.h文件如下:

//  sort.h
#import <Foundation/Foundation.h>
@interface sort : NSObject {

}
// 为sort类声明一个name属性和一个number属性
@property (nonatomic, retain) NSString *name;
@property (nonatomic, assign) int number;

// 自定义一个myCompare: 方法,用来排序name字符串的顺序
- (NSComparisonResult)myCompare:(NSString *)name;

// 自定义一个myCompare2: 方法,用来排序number数字的顺序
- (NSComparisonResult)myCompare2:(sort *)sort;

// 创建一个类方法,方便初始化对象
+ (sort *)sortAlloc;

@end


sort.m文件如下:

//  sort.m
#import "sort.h"
@implementation sort

+ (sort *)sortAlloc {
sort * sort1 = [[sort alloc] init];
return sort1;
}

//- (NSComparisonResult)compare:(NSString *)string;
// compare:方法用于比较字符串并排序
- (NSComparisonResult)myCompare:(sort *)sort {

return [self.name compare:sort.name];
}

// 该方法用来排序数字
- (NSComparisonResult)myCompare2:(sort *)sort {

if ( self.number  > sort.number ) {
return NSOrderedDescending;
} else if (self.number < sort.number ) {
return NSOrderedAscending;
} else {
return NSOrderedSame;
}
}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐