[Object C]_[初级]_[NSArray排序]
来源:互联网 发布:淘宝助手 mac 编辑:程序博客网 时间:2024/05/20 18:43
场景:根据需求让数据内的元素有序排列。
下面是具体实例说明。
ArrayObject.h
#import <Foundation/Foundation.h>@interface Person : NSObject{ NSString *_name; NSInteger _age;}@property (readwrite, copy) NSString *_name;@property (readwrite, assign) NSInteger _age;@end@interface ArrayObject : NSObject-(void)testSortedArrayUsingComparater;-(void) testSortArrayUsingSelector;-(void) testSortedArrayUsingFunction;-(void) doTestSortUsingDescriptors;@end
ArrayObject.m
#import "ArrayObject.h"@implementation Person@synthesize _name;@synthesize _age;- (void)dealloc{ [_name release]; [super dealloc];}@end@implementation ArrayObject//第一种,利用数组的sortedArrayUsingComparator调用 NSComparator ,obj1和obj2指的数组中的对象NSComparator cmptr = ^(id obj1, id obj2){ if ([obj1 integerValue] > [obj2 integerValue]) { return (NSComparisonResult)NSOrderedDescending; } if ([obj1 integerValue] < [obj2 integerValue]) { return (NSComparisonResult)NSOrderedAscending; } return (NSComparisonResult)NSOrderedSame;};-(void)testSortedArrayUsingComparater{ NSArray *sortArray = [[NSArray alloc] initWithObjects:@"10",@"13",@"5",@"15",@"8",@"20",@"1",@"5",@"3",@"7",@"45",@"4",@"23",@"",nil]; //排序前 NSMutableString *beforeStr = [NSMutableString new]; for(NSString *str in sortArray) { [beforeStr appendFormat:@"%@ ",str]; } NSLog(@"排序前:%@",beforeStr); [beforeStr release]; //第一种排序 NSArray *array = [sortArray sortedArrayUsingComparator:cmptr]; NSMutableString *afterStr = [NSMutableString new]; for(NSString *str in array){ [afterStr appendFormat:@"%@ ",str]; } NSLog(@"排序后:%@",afterStr); [afterStr release];}
输出结果:
//第二种排序算法 利用sortedArrayUsingSelector调用系统定义的compare:,主要是对字符串的比较
-(void) testSortArrayUsingSelector{ NSArray *sortArray = [[NSArray alloc] initWithObjects:@"10",@"13",@"5",@"15",@"8",@"20",@"1",@"5",@"3",@"7",@"45",@"4",@"23",@"",nil]; //排序前 NSMutableString *beforeStr = [NSMutableString new]; for(NSString *str in sortArray) { [beforeStr appendFormat:@"%@ ",str]; } NSLog(@"排序前:%@",beforeStr); [beforeStr release]; //第一种排序 //- (NSComparisonResult)compare:(NSString *)string;//比较字符串的大小 //- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask; 比较字符串,按mask的参数进行比较 //mask 参数可以是: NSCaseInsensitiveSearch, NSLiteralSearch, NSNumericSearch. NSArray *array =[sortArray sortedArrayUsingSelector:@selector(compare:options:)]; NSMutableString *affterStr = [NSMutableString new]; for(NSString *str in array){ [affterStr appendFormat:@"%@ ",str]; } NSLog(@"排序后:%@",affterStr); [affterStr release];}输出结果:
若把
NSArray *array =[sortArray sortedArrayUsingSelector:@selector(compare:options:)];中<pre name="code" class="objc">compare:options:改为compare:,则输出结果为:
//第三种 排序方法 利用sortedArrayUsingFunction 调用 对应方法customSort,这个方法中的obj1和obj2分别是指数组中的对象。
NSInteger customSort(id obj1, id obj2,void* context){ if ([obj1 integerValue] > [obj2 integerValue]) { return (NSComparisonResult)NSOrderedDescending; } if ([obj1 integerValue] < [obj2 integerValue]) { return (NSComparisonResult)NSOrderedAscending; } return (NSComparisonResult)NSOrderedSame;}-(void) testSortedArrayUsingFunction{ NSArray *sortArray = [[NSArray alloc] initWithObjects:@"10",@"13",@"5",@"15",@"8",@"20",@"1",@"5",@"3",@"7",@"45",@"4",@"23",@"",nil]; //排序前 NSMutableString *beforeStr = [NSMutableString new]; for(NSString *str in sortArray){ [beforeStr appendFormat:@"%@ ",str]; } NSLog(@"排序前:%@",beforeStr); [beforeStr release]; NSArray *array = [sortArray sortedArrayUsingFunction:customSort context:nil]; NSMutableString *afterStr = [NSMutableString new]; for(NSString *str in array){ [afterStr appendFormat:@"%@ ",str]; } NSLog(@"排序后:%@",afterStr); [afterStr release];}
输出结果:
//第四种 利用sortUsingDescriptors调用NSSortDescriptor
-(void) doTestSortUsingDescriptors{ Person *person1 = [[Person alloc] init]; [person1 set_name:@"ABCD"]; [person1 set_age:24]; Person *person2 = [[Person alloc] init]; [person2 set_name:@"ACBA"]; [person2 set_age:22]; Person *person3 = [[Person alloc] init]; [person3 set_name:@"ABDC"]; [person3 set_age:33]; NSMutableArray *array = [NSMutableArray arrayWithObjects:person1, person2, person3, nil]; [person1 release]; [person2 release]; [person3 release]; NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"_name" ascending:YES];//YES降序,NO升序 //这个数组保存的是排序好的对象 NSArray *tempArray = [array sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]]; for (Person *ii in tempArray) { NSLog(@"name:%@,age:%ld",ii._name,ii._age); }}@end
输出结果:
降序:ascending:YES
升序:ascending:NO
用数据结构排序算法对NSArray进行排序,项目代码点击链接下载:
http://download.csdn.net/detail/moqj_123/9252059
0 0
- [Object C]_[初级]_[NSArray排序]
- [Object-c]_[初级]_[数组NSArray过滤NSPredicate的简单介绍]
- [Object C]_[初级]_[Object C之内存管理]
- [Object c]_[初级]_[NSString常用方法的总结]
- [Object C]_[初级]_[NSUserDefaults在项目中的应用]
- [Object-C]_[初级]_[object类的对象和属性@property]
- object-c NSArray排序小结
- object-c NSArray排序转载
- [Object C]_[初级]_[两个数组共有元素的提取,删除,数组的合并]
- [Object C]_[初级]_[文件修改创建时间和修改时间]
- [C/C++]_[初级]_[原子操作]
- [C/C++标准库]_[初级]_[对C链表排序]
- [C/C++标准库]_[初级]_[标准库里提供的排序算法]
- [C/C++标准库]_[初级]_[使用std::sort排序各种类型数据]
- [C++/object c]_[初级]_[std::map容器的使用总结和NSDictionary词典使用总结]
- object c NSArray 数组的排序
- [Object C]_[初级]_[创建文件路径时,已存在同名目录和文件名的问题的解决方案]
- [C/C++]_[初级]_[C语言编译过程]
- HDU 5504 GT and sequence 模拟
- Ajax详解
- [leetcode]Reorder List
- 内存管理器(五)Glibc malloc实现(一)(概论)
- 当在浏览器地址栏输入一个URL后回车,将会发生的事情?
- [Object C]_[初级]_[NSArray排序]
- 012.季节判断
- [开源与硬件]USB模块的驱动开发要吃透
- RDD的创建
- Web 服务编程,REST 与 SOAP
- 棋牌游戏发展前景分析
- Android_04_HttpURLConnection使用总结
- 第六周--数据结构之自建算法库之表达式求值(用栈结构)
- LogBean