到今天才发现oc的强大,今天做了一个要求进行Array数组排序的题,数组中存放若干个person对象,person对象有年龄、姓名、成绩成员变量,要求对数组按照成绩—年龄—姓名的大小顺序排序输出,第一感觉我会想到c语言的数组排序,创建一个二维数组,存放若干个person对象,而不同的数据类型明显没办法放到c数组中,这就不得不用Array了,然后对array数组遍历,然后比较各个对象中的元素,然后排序。这……我就没辙了,oc的强大就显现出来了,oc中有一个NSSortDescription类,这个是创建排序扫描器用的,其实就是创建一个排序规则,通过一些对象方法就能简单实现排序。比如
- Person *s1 = [[Student alloc] initWithName:@"jack" andAge:22 andScore:87];
-
- Person *s2 = [[Student alloc] initWithName:@"tom" andAge:20 andScore:87];
- Person*s3 = [[Student alloc] initWithName:@"sosan" andAge:22 andScore:79];
- Person *s4 = [[Student alloc] initWithName:@"jake" andAge:22 andScore:91];
- //放入数值
- NSArray *array = [NSArray arrayWithObjects:s1,s2,s3,s4, nil];
-
- //构建排序描述器
- NSSortDescriptor *scoreDesc = [NSSortDescriptor sortDescriptorWithKey:@"score" ascending:YES];
- NSSortDescriptor *ageDesc = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES];
- NSSortDescriptor *nameDesc = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
-
- //把排序描述器放进数组里,放入的顺序就是你想要排序的顺序
- //按成绩——年龄——姓名排序
- NSArray *descriptorArray = [NSArray arrayWithObjects:scoreDesc,ageDesc,nameDesc, nil];
-
- NSArray *sortedArray = [array sortedArrayUsingDescriptors: descriptorArray];
- NSLog(@"%@",sortedArray);
复制代码 瞬间觉得高大上啊,有木有
|