NSArray的各种遍历以及各种排序方法
来源:互联网 发布:mysql编程培训班 编辑:程序博客网 时间:2024/05/20 20:02
一、遍历
1.for循环遍历
NSArray *array = [NSArray arrayWithObjects:stu1, @"1", @"2", @"3", nil]; int count = array.count; for (int i = 0; i<count; i++) { id obj = [array objectAtIndex:i]; }
2.快速遍历
Student *stu1 = [Student student]; NSArray *array = [NSArray arrayWithObjects:stu1, @"1", @"2", @"3", nil]; int i =0; for (id obj in array) { NSLog(@"%d-%@", i, obj); i++; }
3.代码块遍历
Student *stu1 = [Student student];
NSArray *array = [NSArray arrayWithObjects:stu1, @"1", @"2", @"3", nil];
[array enumerateObjectsUsingBlock:
^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"%ld-%@",idx, obj);
// 如果索引为1,就停止遍历
if (idx == 1) {
// 利用指针修改外面BOOL变量的值
*stop = YES;
}
}];
4.迭代器方法遍历
Student *stu1 = [Student student];
NSArray *array = [NSArray arrayWithObjects:stu1, @"1", @"2", @"3", nil];
// 获取数组的迭代器
// NSEnumerator *enumerator = [array objectEnumerator];
// 反序迭代器(从尾部开始遍历元素)
NSEnumerator *enumerator = [array reverseObjectEnumerator];
// allObjects是取出没有被遍历过的对象
NSArray *array2 = [enumerator allObjects];
NSLog(@"array2:%@", array2);
// 获取下一个需要遍历的元素
id obj = nil;
while (obj = [enumerator nextObject]) {
NSLog(@"obj=%@", obj);
}
二、排序
以下数组排序中,如果存放的是NSNumber类型的,例如NSArray *array = [NSArray arrayWithObjects:@245, @33, @1456, @4, nil];则会按照转化为常用类型后的大小排序,但是如果存放的是字符串,例如NSArray *array = [NSArray arrayWithObjects:@"245", @"33", @"1456", @"4", nil];则会先按照第一位大小排序,第一位大小相同的,会按照第二位大小再排,以此类推,下面就简单以字符串为代表罗列以下
1.普通排序 NSArray *array = [NSArray arrayWithObjects:@"2", @"3", @"1", @"4", nil];
// 返回一个排好序的数组,原来数组的元素顺序不会改变
// 指定元素的比较方法:compare:
NSArray *array2 = [array sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"array2:%@", array2);
下面的排序需要用到自定义的类型,我们就自定义一个dataaaaa类,添加属性和方法
@property (strong,nonatomic) NSString *money;@property (strong,nonatomic) NSString *count;@property (strong,nonatomic) NSNumber *moneyN;@property (strong,nonatomic) NSNumber *countN;- (NSComparisonResult)comparedata1:(dataaaaa *)aaa;- (NSComparisonResult)comparedata2:(dataaaaa *)aaa;
之后在需要排序的地方实例化一个存存放该数据类型的数组
dataaaaa *a1=[[dataaaaa alloc]init]; a1.money=@"5"; a1.count=@"435"; a1.moneyN=@5; a1.countN=@435; dataaaaa *a2=[[dataaaaa alloc]init]; a2.money=@"480"; a2.count=@"23"; a2.moneyN=@480; a2.countN=@23; dataaaaa *a3=[[dataaaaa alloc]init]; a3.money=@"135"; a3.count=@"2335"; a3.moneyN=@135; a3.countN=@2335; dataaaaa *a4=[[dataaaaa alloc]init]; a4.money=@"135"; a4.count=@"17"; a4.moneyN=@135; a4.countN=@17;
2.自定义排序方法
// 指定排序的比较方法 //NSArray *array2 = [array sortedArrayUsingSelector:@selector(comparedata1:)]; NSArray *array2 = [array sortedArrayUsingSelector:@selector(comparedata2:)]; for (dataaaaa *aaa in array2) { NSLog(@"aaa.money==%@ aaa.count==%@",aaa.money,aaa.count); }
其中comparedata1:和comparedata2:方法的实现和声明是在dataaaa类中实现的
- (NSComparisonResult)comparedata1:(dataaaaa *)aaa { // 先按照姓排序 NSComparisonResult result = [self.money compare:aaa.money]; // 如果有相同的姓,就比较名字 if (result == NSOrderedSame) { result = [self.count compare:aaa.count]; } return result; } - (NSComparisonResult)comparedata2:(dataaaaa *)aaa { // 先按照姓排序 NSComparisonResult result = [self.moneyN compare:aaa.moneyN]; // 如果有相同的姓,就比较名字 if (result == NSOrderedSame) { result = [self.countN compare:aaa.countN]; } return result; }
3.代码块方法排序
NSArray *array=@[a1,a2,a3,a4]; NSArray *array2 = [array sortedArrayUsingComparator: ^NSComparisonResult(dataaaaa *obj1, dataaaaa *obj2) { NSComparisonResult result = [obj1.money compare:obj2.money]; // 如果有相同的姓,就比较名字 if (result == NSOrderedSame) { result = [obj1.count compare:obj2.count]; } return result; }];
4.描述法实现排序
NSArray *array = [NSArray arrayWithObjects:a1,a2,a3,a4,nil]; // 先按照money进行排序 // 这里的key写的是@property的名称 //如果dataaaaa中还有自定义对象databbb,并且需要其字段排序,则可以@"databbb.shuxing",其中shuxing是databbb的@property的名称 NSSortDescriptor *moneyasc = [NSSortDescriptor sortDescriptorWithKey:@"money" ascending:YES]; //再按照count进行排序 NSSortDescriptor *countasc = [NSSortDescriptor sortDescriptorWithKey:@"count" ascending:YES]; //按顺序添加排序描述器 NSArray *ascs = [NSArray arrayWithObjects:moneyasc,countasc,nil]; NSArray *array2 = [array sortedArrayUsingDescriptors:ascs];
5.快速排序
void quiksort(int a[],int low,int high){ int i = low; int j = high; int temp = a[i]; if( low < high) { while(i < j) { while((a[j] >= temp) && (i < j)) { j--; } a[i] = a[j]; while((a[i] <= temp) && (i < j)) { i++; } a[j]= a[i]; } a[i] = temp; quiksort(a,low,i-1); quiksort(a,j+1,high); } else { return; }} void main(){ int arry[5] = {23,1,21,4,19}; quiksort(arry,0,4); for(i=0;i<5;i++) { printf("%d ",arr[i]); } printf("\n");}
6.冒泡排序:(从小到大排序)存在10个不同大小的气泡,由底至上地把较少的气泡逐步地向上升,这样经过遍历一次后,最小的气泡就会被上升到顶(下标为0),然后再从底至上地这样升,循环直至十个气泡大小有序。最重要的思想是两两比较,将两者较少的升上去
#include <stdio.h> void swap(int *a, int *b); int main() { int array[10] = {15, 225, 34, 42, 52, 6, 7856, 865, 954, 10}; int i, j; for (i = 0; i < 10; i++) { //每一次由底至上地上升 for (j = 9; j > i; j--) { if (array[j] < array[j-1]) { swap(&array[j], &array[j-1]); } } } for (i = 0; i < 10; i++) { printf("%d\n", array[i]); } return 0; } void swap(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; }
- iOS中NSArray的各种遍历以及各种排序方法
- NSArray的各种遍历以及各种排序方法
- NSArray各种遍历
- ArrayList,LinkedList的比较 以及各种遍历方法的比较
- 二叉树的创建以及各种遍历
- java的各种排序方法
- java的各种排序方法
- java的各种排序方法..
- java的各种排序方法..
- java的各种排序方法..
- java的各种排序方法..
- 各种排序方法的对比。
- 各种排序方法的比较
- 各种排序方法的比较
- 各种排序方法的算法
- 快速排序的各种方法
- 各种排序方法的比较
- 各种排序方法的优缺点
- 干货!O2O模式三个特点和两大难题
- Android Https相关完全解析 当OkHttp遇到Https
- Js获取当前日期时间及其它操作
- java double类型保留两位小数4种方法
- 八旬老人守护病妻24年不弃 称爱就要守在一起
- NSArray的各种遍历以及各种排序方法
- SAXReader读取配置
- Linux c 源码(issockettype:套接字描述符判定函数)
- eclipse maven建立多模块工程
- Android 实现变色状态栏
- 关于 HTTP GET/POST 请求参数长度最大值的问题
- 从Eclipse转到Android studio的历程
- Ubuntu 12.04 root用户登录设置
- 2015智慧城市建设新趋势