[示例-NSArray排序]-根据班级、姓名和年龄排序学生信息

main:

 1 #import <Foundation/Foundation.h>
 2 #import "Person.h"
 3
 4 int main(int argc, const char * argv[]) {
 5     @autoreleasepool {
 6         Person *stu1=[[Person alloc]initClasses:@"iOS8" andName:@"ZXY" andAge:21];
 7         Person *stu2=[[Person alloc]initClasses:@"iOS6" andName:@"HYU" andAge:28];
 8         Person *stu3=[[Person alloc]initClasses:@"iOS8" andName:@"AWE" andAge:25];
 9         Person *stu4=[[Person alloc]initClasses:@"iOS6" andName:@"MKI" andAge:23];
10         Person *stu5=[[Person alloc]initClasses:@"iOS8" andName:@"BYU" andAge:24];
11         NSArray *arr=[NSArray arrayWithObjects:stu1,stu2,stu3,stu4,stu5,nil];       //将实例化的对象放入数组中
12         NSArray *sortArr1=[arr sortedArrayUsingSelector:@selector(compareWithClassAndName:)];    //将排序后的数组存入到新数组sortArr中
13         //NSLog(@"%@",sortArr1);     //采用description输出
14         for (Person *person in sortArr1){
15             NSLog(@"姓名:%@,班级:%@,年龄:%d",person.name,person.classes,person.age);
16         }
17         NSArray *sortArr2=[arr sortedArrayUsingSelector:@selector(compareWithAge:)];            //按年龄排序
18         for(Person *person in sortArr2){
19             NSLog(@"姓名:%@,班级:%@,年龄:%d",person.name,person.classes,person.age);
20         }
21     }
22     return 0;
23 }

Person.h:

 1 #import <Foundation/Foundation.h>
 2
 3 @interface Person : NSObject
 4 @property NSString *classes;
 5 @property NSString *name;
 6 @property int age;
 7 -(instancetype)initClasses:(NSString *)classes andName:(NSString *)name andAge:(int)age;        //初始化数据
 8 -(NSComparisonResult)compareWithClassAndName:(Person *)person;        //比较姓名和班级
 9 -(NSComparisonResult)compareWithAge:(Person *)person;       //比较年龄
10 @end

Person.m:

 1 #import "Person.h"
 2
 3 @implementation Person
 4 -(instancetype)initClasses:(NSString *)classes andName:(NSString *)name andAge:(int)age;        //初始化数据
 5 {
 6     Person *person=[[Person alloc]init];
 7     person.classes=classes;             //给classes赋值,后面的classes为主函数中实例化的数据传进来的形参
 8     person.name=name;
 9     person.age=age;
10     return person;
11 }
12 -(NSComparisonResult)compareWithClassAndName:(Person *)person;        //比较姓名和班级
13 {
14     NSComparisonResult result=[self.classes compare:person.classes];        //比较本类中的classes和传进来的classes
15     if(result==NSOrderedSame){
16         return [self.name compare:person.name];     //返回比较值
17     }
18     else{
19         return result;
20     }
21 }
22 -(NSComparisonResult)compareWithAge:(Person *)person;       //比较年龄
23 {
24     if(self.age==person.age){
25         return NSOrderedSame;
26     }
27     else if(self.age>person.age){
28         return NSOrderedDescending;
29     }
30     else{
31         return NSOrderedAscending;
32     }
33 }
34 -(NSString *)description{           //重写description使打印出来的带有格式
35     return [NSString stringWithFormat:@"Class:%@ Name:%@ Age:%d",self.classes,self.name,self.age];        //格式化输出
36 }
37 @end

(以上代码在Xcode 6.4中编译运行正常)

时间: 2024-12-09 19:23:54

[示例-NSArray排序]-根据班级、姓名和年龄排序学生信息的相关文章

MySQL中查询获取每个班级成绩前三名的学生信息

今天有同事说到了怎么MySQL中查询获取每个班级成绩前三名的学生信息,在网上查了查,然后写出代码,很快就OK了. CREATE TABLE t_testscore(    pk_id INT PRIMARY KEY,    c_name VARCHAR(50) ,    c_score INT,    c_class INT )DEFAULT CHARSET=utf8; INSERT INTO t_testscore VALUES (1, '张三6', 66, 1),(2, '张三5', 65,

Comparator按照姓名、年龄排序

package com.heli.compare; import java.text.Collator; import java.util.Comparator; import java.util.Locale; /**  * @desc Person类. Person实现了Comparable接口,这意味着Person本身支持排序  */ public class Person implements Comparable<Person> { int age; String name; pub

【OC复合题】之定义一个学生类,需要有姓名,年龄,考试成绩三个成员属性,创建5个对象,属性可以任意值。(Objective-C)

题目: 定义一个学生类,需要有姓名,年龄,考试成绩三个成员属性,创建5个对象,属性可以任意值.(Objective-C) 1)    不使用@property,手动编写他们的访问器方法(getter和setter),注意内存管理(手动管理内存) 2)    增加一个便利构造器(快速构造器) 3)    使用NSLog输出学生对象时,输出信息格式为:My Name Is XXX  Age Is XXX Score Is XXX 4)    对5个学生对象按照成绩->年龄->姓名优先级排序(成绩相

OC字典存入数组,输出数组中数据,并且删除小明一项,然后进行排序、现根据班级排序,班级相同的用年龄进行排序

#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSDictionary *[email protected]{@"name":@"小阳", @"class":@"IOS8", @"age":@"20" }; NSDictionary

//输入学生人数,挨个输入姓名,身高,年龄,求平均年龄,然后按身高降序排列输出

13:52:49N U L L 2014/12/19 13:52:49using System;using System.Collections;using System.Collections.Generic;using System.Linq;using System.Text; namespace _1120_1210{    class JieGouTi    {        //输入学生人数,挨个输入姓名,身高,年龄,求平均年龄,然后按身高降序排列输出        public s

练习:往HashSet中存储学生对象(姓名,年龄) 同姓名,同年龄视为一个人,不存

具体源码实现 package com.runoob.test; import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class HashSetTest { public static void main(String[] args) { // TODO Auto-generated method stub /* * 练习:往HashSet中存储学生对象(姓名,年龄) 同姓名,同年龄视为

声明四个变量,姓名、年龄、性别和身高,打印出来。

/** * @author 蓝色以太 * 声明四个变量,姓名.年龄.性别和身高,打印出来. */ public class DeclareVariables { public static void main(String[] args) { String name="张三"; int age=20; char gender='男'; double height=1.78; System.out.println("姓名:"+name); System.out.pri

员工年龄排序

转载请注明出处:http://blog.csdn.net/ns_code/article/details/25144793   对公司所有员工的年龄进行排序,公司总共有几万名员工,要求时间复杂度为O(n). 很明显的计数排序题目,员工的年龄肯定在一个范围之内,我们这里假设在0-99之内,算很大了,这样就可以开辟一个长度为100的数组,保存各个年龄的员工的个数. 代码如下: /* 员工年龄排序,主要用计数排序的思想, 时间复杂度为O(n),需要固定大小的额外辅助空间 */ #include<std

20150920学习内容:结构体及题目:定义一个学生的结构体,学号,姓名,身高,输入学生信息,按身高排序输出

结构体:用户自定义数据类型,实际就是变量组,可以一次存多个不同变量 结构体定义在main函数的外面 Struck 结构体名 { // 元素一 // 元素二 } 题目:定义一个学生的结构体,学号,姓名,身高,输入学生信息,按身高排序输出