main函数:
1 // 2 // main.m 3 // NSArray排序 4 // 5 // Created by dingxiaowei on 13-5-13. 6 // Copyright (c) 2013年 dingxiaowei. All rights reserved. 7 // 8 9 #import <Foundation/Foundation.h> 10 #import "Student.h" 11 #pragma mark - 派生出新数组 12 void newArray(){ 13 NSArray *array1=[NSArray arrayWithObjects:@"1",@"2", nil]; 14 NSArray *array2=[array1 arrayByAddingObject:@"3"];//添加元素 15 NSLog(@"array1:%@\narray2:%@",array1,array2); 16 17 NSArray *array3=[array1 arrayByAddingObjectsFromArray:[NSArray arrayWithObjects:@"4",@"5",@"6",nil]]; //将后面一个array附加z在array1的前面 18 NSLog(@"array3:%@",array3); 19 20 //截取array中的元素 21 NSRange range=NSMakeRange(2, 2);//从第三个位置截取两个范围 22 NSArray *array4=[array3 subarrayWithRange:range];//截取数组元素 23 NSLog(@"截取后的数组是:%@",array4); 24 25 26 } 27 28 #pragma mark - 数组的其他用法 29 void arrayOther(){ 30 NSArray * array=[NSArray arrayWithObjects:@"1",@"2",@"3",@"4",nil]; 31 //用符号将数组拼接成字符串 32 NSString *str=[array componentsJoinedByString:@","]; 33 NSLog(@"str=%@",str); 34 35 //将数组写入到文件 36 NSString *path=@"/Users/dingxiaowei/Desktop/array.xml"; 37 [array writeToFile:path atomically:YES];//原子性就是等全部加载到文件中再写入 38 NSLog(@"文件写入成功"); 39 //从文件中读取内容(文件格式由严格的要求) 40 NSArray *arrayRead=[NSArray arrayWithContentsOfFile:path]; 41 NSLog(@"读取文件的内容:%@",arrayRead); 42 NSLog(@"文件读取成功"); 43 } 44 45 #pragma mark - 数组排序 46 void arraySort1(){ 47 NSArray * array=[NSArray arrayWithObjects:@"5",@"2",@"3",@"4",nil]; 48 //指定元素的比较方法 数组中元素之间diao 49 NSArray *newArray=[array sortedArrayUsingSelector:@selector(compare:)];//返回一个新的排序后的数组,原来的那个数组不可变 依次调用compare方法 50 NSLog(@"排序后的数组:%@",newArray); 51 } 52 #pragma mark - 数组排序2(对对象进行排序) 53 void arraySort2(){ 54 Student *stu1=[Student initeWithFirstName:@"xiaowei" andLastName:@"ding"]; 55 Student *stu2=[Student initeWithFirstName:@"lianjie" andLastName:@"li"]; 56 Student *stu3=[Student initeWithFirstName:@"xiaolong" andLastName:@"ding"]; 57 Student *stu4=[Student initeWithFirstName:@"pengyu" andLastName:@"han"]; 58 59 NSArray *array=[NSArray arrayWithObjects:stu1,stu2,stu3,stu4,nil]; 60 //按照学生的姓名进行排序 61 NSArray *newArray=[array sortedArrayUsingSelector:@selector(compareStudent:)]; 62 NSLog(@"排序后的学生数组是:%@",newArray); 63 } 64 #pragma mark - block排序 65 void arraySort3(){ 66 Student *stu1=[Student initeWithFirstName:@"xiaowei" andLastName:@"ding"]; 67 Student *stu2=[Student initeWithFirstName:@"lianjie" andLastName:@"li"]; 68 Student *stu3=[Student initeWithFirstName:@"xiaolong" andLastName:@"ding"]; 69 Student *stu4=[Student initeWithFirstName:@"pengyu" andLastName:@"han"]; 70 71 NSArray *array=[NSArray arrayWithObjects:stu1,stu2,stu3,stu4,nil]; 72 //利用block进行排序 73 NSArray *newArray=[array sortedArrayUsingComparator:^NSComparisonResult(Student * obj1, Student * obj2) { 74 //先按照姓氏排序 75 NSComparisonResult *result=[obj1.lastName compare:obj2.lastName]; 76 //如果由相同的姓,则比较名 77 if(result==NSOrderedSame) 78 { 79 result=[obj1.firstName compare:obj2.firstName]; 80 } 81 return result; 82 }]; 83 NSLog(@"排序后的学生数组是:%@",newArray); 84 } 85 #pragma mark - 带有Book类的学生进行排序 86 void arraySort4(){ 87 Student *stu1=[Student initeWithFirstName:@"xiaowei" andLastName:@"ding" andBookName:@"book1"]; 88 Student *stu2=[Student initeWithFirstName:@"lianjie" andLastName:@"li" andBookName:@"book2"]; 89 Student *stu3=[Student initeWithFirstName:@"xiaolong" andLastName:@"ding" andBookName:@"book2"]; 90 Student *stu4=[Student initeWithFirstName:@"pengyu" andLastName:@"han" andBookName:@"book1"]; 91 92 NSArray *array=[NSArray arrayWithObjects:stu1,stu2,stu3,stu4,nil]; 93 //1.先按照书名进行排序 94 //排序描述类 95 //先按照书进行排序 96 NSSortDescriptor *bookNameDes=[NSSortDescriptor sortDescriptorWithKey:@"book.name" ascending:YES];//YES代表升序 第一个参数跟类的成员名要一致 这儿写成book.name是因为Student对象本身就有个Book*类型的book成员,然而book又有个name属性 97 //再按照姓进行排序 98 NSSortDescriptor *lastNameDes=[NSSortDescriptor sortDescriptorWithKey:@"lastName" ascending:YES];//YES代表升序 //这儿的lastName要跟前面的成员名一致及propert里面的lastName一致 99 //再按照名进行排序 100 NSSortDescriptor *firstNameDes=[NSSortDescriptor sortDescriptorWithKey:@"firstName" ascending:YES];//YES代表升序 101 102 //类名排序类 103 NSArray *desc=[NSArray arrayWithObjects:bookNameDes,lastNameDes,firstNameDes,nil]; 104 NSArray *array2=[array sortedArrayUsingDescriptors:desc];//按照那个排序类里面的成员依次进行排序 105 NSLog(@"未排序之前的成员顺序是:%@",array); 106 NSLog(@"排序后的成员(先按书名排序,后按照姓名排序):%@",array2); 107 } 108 int main(int argc, const char * argv[]) 109 { 110 111 @autoreleasepool { 112 113 // newArray(); 114 // arrayOther(); 115 // arraySort1(); 116 // arraySort2(); 117 // arraySort3(); 118 arraySort4(); 119 } 120 return 0; 121 }
Student.h
1 #import <Foundation/Foundation.h> 2 3 @class Book; 4 5 6 @interface Student : NSObject 7 @property(nonatomic,retain) NSString *firstName; //名 8 @property(nonatomic,retain) NSString *lastName; //姓 9 @property(nonatomic,retain) Book *book;//这是一本书 10 //初始化带有姓名的学生 11 +(id)initeWithFirstName:(NSString *) firstName andLastName:(NSString *)lastName; 12 //初始化一个拥有书名且由姓名的学生 13 +(id)initeWithFirstName:(NSString *) firstName andLastName:(NSString *)lastName andBookName:(NSString *)bookName; 14 //设置一个比较函数 返回值为NSComparisonResult 15 -(NSComparisonResult)compareStudent:(Student *)stu; 16 @end
Student.m
1 // 2 // Student.m 3 // NSArray排序 4 // 5 // Created by dingxiaowei on 13-5-13. 6 // Copyright (c) 2013年 dingxiaowei. All rights reserved. 7 // 8 9 #import "Student.h" 10 #import "Book.h" 11 @implementation Student 12 //初始化带有姓名的学生 13 +(id)initeWithFirstName:(NSString *)firstName andLastName:(NSString *)lastName{ 14 Student *stu=[[[Student alloc] init] autorelease]; 15 stu.firstName=firstName; 16 stu.lastName=lastName; 17 return stu; 18 } 19 //初始化一个拥有书名且由姓名的学生 20 +(id)initeWithFirstName:(NSString *)firstName andLastName:(NSString *)lastName andBookName:(NSString *)bookName{ 21 Student *stu=[Student initeWithFirstName:firstName andLastName:lastName]; 22 stu.book=[Book bookWithName:bookName]; 23 return stu; 24 } 25 //实现比较方法 26 -(NSComparisonResult)compareStudent:(Student *)stu{ 27 //先按照姓氏排序 28 NSComparisonResult *result=[self.lastName compare:stu.lastName]; 29 //如果由相同的姓,则比较名 30 if(result==NSOrderedSame) 31 { 32 result=[self.firstName compare:stu.firstName]; 33 } 34 return result; 35 } 36 //重新实现description方法 37 -(NSString *)description{ 38 return [NSString stringWithFormat:@"[%@ %@-%@]",self.lastName,self.firstName,self.book.name]; 39 } 40 -(void)dealloc{ 41 [_firstName release]; 42 [_lastName release]; 43 44 [super dealloc]; 45 } 46 @end
Book.h
1 #import <Foundation/Foundation.h> 2 3 @interface Book : NSObject 4 @property(nonatomic,retain)NSString *name; 5 +(id)bookWithName:(NSString *)name; 6 @end
Book.m
1 #import "Book.h" 2 3 @implementation Book 4 //快速创建对象 5 +(id)bookWithName:(NSString *)name{ 6 Book *book=[[[Book alloc] init] autorelease]; 7 book.name=name; 8 return book; 9 } 10 //释放对象 11 -(void)dealloc{ 12 [_name release]; 13 [super dealloc]; 14 } 15 @end
运行结果
1 2013-05-14 21:21:22.339 NSArray排序[492:303] 未排序之前的成员顺序是:( 2 "[ding xiaowei-book1]", 3 "[li lianjie-book2]", 4 "[ding xiaolong-book2]", 5 "[han pengyu-book1]" 6 ) 7 2013-05-14 21:21:22.345 NSArray排序[492:303] 排序后的成员(先按书名排序,后按照姓名排序):( 8 "[ding xiaowei-book1]", 9 "[han pengyu-book1]", 10 "[ding xiaolong-book2]", 11 "[li lianjie-book2]" 12 )