(新人上路)成绩单实现对象三种排序方法 及归档解归档方法
来源:互联网 发布:d80军刀图纸数据 编辑:程序博客网 时间:2024/06/05 14:26
@interface Grade : NSObject<NSCoding>
@property (copy, nonatomic)NSString *name;
@property int score;
-(id)initWithName:(NSString *)name andScore:(int)score;
-(void)print;
//-(NSComparisonResult)comparePerson:(Person *)person
@end
#import "Grade.h"
@implementation Grade
-(id)initWithName:(NSString *)name andScore:(int)score{
if (self = [super init]) {
self.name = name;
self.score = score;
}
return self;
}
-(void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeInt:self.score forKey:@"score"];
}
-(id)initWithCoder:(NSCoder *)aDecoder{
if (self = [super init]) {
self.name = [aDecoder decodeObjectForKey:@"name"];
self.score = [aDecoder decodeIntForKey:@"score"];
}
return self;
}
-(void)print{
NSLog(@"name: %@ score: %d",self.name,self.score);
}
////自定义排序方法
//-(NSComparisonResult)compareGrade:(Grade *)g{
// //默认按分数排序
// NSComparisonResult result = [[NSNumber numberWithInt:g.score] compare:[NSNumber numberWithInt:self.score]];//注意:基本数据类型要进行数据转换
// //如果分数一样,就按照名字排序
// if (result == NSOrderedSame) {
// result = [self.name compare:g.name];
// }
// return result;
//}
@end
#import <Foundation/Foundation.h>
#import "Grade.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Grade *g1 = [[Grade alloc]initWithName:@"liucan" andScore:100 ];
Grade *g2 = [[Grade alloc]initWithName:@"pengfan" andScore:98];
Grade *g3 = [[Grade alloc]initWithName:@"jiekangwei" andScore:59];
Grade *g4 = [[Grade alloc]initWithName:@"wenbing" andScore:75 ];
NSArray *ranklist = [NSMutableArray arrayWithObjects:g1,g2,g3,g4, nil];//把所有对象集中到ranklist数组对象中
//使用selector排序
//输出各个对象的姓名和分数
// [ranklist makeObjectsPerformSelector:@selector (print)];
//创建第一个NSSortDescriptor对象,以名字为描述符排序
// NSSortDescriptor *rank1 = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
//创建第二个NSSortDescriptor对象,以分数为描述符排序
// NSSortDescriptor *rank2 = [NSSortDescriptor sortDescriptorWithKey:@"score" ascending:YES];
//把所有描述符集中到对象数组中,先排分数,再排姓名
// NSArray *arr = [NSArray arrayWithObjects:rank2,rank1,nil];
// NSArray *arr1 = [ranklist sortedArrayUsingDescriptors:arr];
// [arr1 makeObjectsPerformSelector:@selector (print)];
//使用Block排序
NSArray *ranklist2 = [ranklist sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
Grade *p1 = (Grade *)obj1;
Grade *p2 = (Grade *)obj2;
NSComparisonResult result;
result = [[NSNumber numberWithInt:p1.score]compare:[NSNumber numberWithInt:p2.score]];
if (result == NSOrderedSame) {
result = [p1.name compare:p2.name];
}
return result;
}];
// for(Grade *g in ranklist2){
// //NSLog(@"name: %@ score: %d ",g.name,g.score);
// [g print];
// }
//归档
NSString *homepath = NSHomeDirectory();
NSString *path = [homepath stringByAppendingPathComponent:@"ranklist.plist"];
if ([NSKeyedArchiver archiveRootObject:ranklist2 toFile:path]) {
NSLog(@" 归档成功");
}
//解档,并读取归档文件加载数据
NSArray *ranklist3 = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
NSLog(@" ranklist ");
for(Grade *g in ranklist3){
//NSLog(@"解档后: name: %@ score: %d ",g.name,g.score);
[g print];
}
return 0;
}
2014-07-31 20:12:55.857 Grade[1077:303] 归档成功
2014-07-31 20:12:55.859 Grade[1077:303] ranklist
2014-07-31 20:12:55.859 Grade[1077:303] name: jiekangwei score: 59
2014-07-31 20:12:55.859 Grade[1077:303] name: wenbing score: 75
2014-07-31 20:12:55.859 Grade[1077:303] name: pengfan score: 98
2014-07-31 20:12:55.860 Grade[1077:303] name: liucan score: 100
Program ended with exit code: 0
- (新人上路)成绩单实现对象三种排序方法 及归档解归档方法
- 封装归档,反归档方法
- Oracle数据库关闭归档功能及删除归档日志方法
- ArchiverDemo(两种归档的方法)
- iOS开发 数据存取方法 对象归档
- Swift实现对象归档
- iOS 归档方法UserDefaults
- 数据归档方法
- ios 对象归档解档 runtime实现
- 高级UIKit-04(NSUserDefaults、NSKeyedArchiver、对象归档方法) - 回读(IOS)
- 对象归档
- 对象归档
- 对象归档
- 对象归档
- 归档数据的读写方法。。。
- runtime 优化归档 ,替换方法
- oralce RAC 归档日志的方式及RMAN备份方法
- 数据在沙盒中存储的三种方法---plist存储,偏好设置存储,归档
- linux c mysql demo
- IOCP六:UDP 客户端退出
- HDU_1715 大斐波数
- Highcharts常用属性的说明
- 再说JDBC
- (新人上路)成绩单实现对象三种排序方法 及归档解归档方法
- HDOJ 题目2084 数塔(动态规划)
- air-line ticket selling system
- 如何判断用户用的是Android手机还是IOS手机
- Linux操作系统CPU信息
- unity3d,通过WWW加载图片纹理
- hql中setDate和setTimeStamp的区别
- Quartz入门实例7-处理被中断的Job
- 无序数组中最长连续序列