当前位置: 首页 > news >正文

oc之类排序

根据学生班级 ,姓名,年龄进行排序,若班级相同,则按照姓名进行排序

示例代码:

main.m

 1 #import <Foundation/Foundation.h>
 2 #import "Person.h"
 3 #define NSLog(FORMAT, ...) printf("%s\n", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String])
 4 
 5 int main(int argc, const char * argv[]) {
 6     @autoreleasepool {
 7         Person *stu1=[[Person alloc]initClasses:@"IOS8"
 8                                         andName:@"ZXY"
 9                                         andAge:22];
10         Person *stu2=[[Person alloc]initClasses:@"IOS8"
11                                         andName:@"ASD"
12                                          andAge:24];
13         Person *stu3=[[Person alloc]initClasses:@"IOS7"
14                                         andName:@"JYC"
15                                          andAge:21];
16         Person *stu4=[[Person alloc]initClasses:@"IOS7"
17                                         andName:@"GFD"
18                                          andAge:23];
19         NSArray *arr=[NSArray arrayWithObjects:stu1,stu2,stu3,stu4,nil];
20 
21         NSArray *sortArr=[arr sortedArrayUsingSelector:@selector(compareWithClassAndName:)];
22         for(Person *person in sortArr){
23             NSLog(@"班级%@ 姓名%@ 年龄%d",person.classes,person.name,person.age);
24         }
25        NSLog(@"%@",sortArr);
26        
27     }
28     return 0;
29 }

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 //instancetype  返回输入的对象  instancetype 可以反回和方法所在类相同类型的对象
 9 -(NSComparisonResult)compareWithClassAndName:(Person *)person;
10 -(NSComparisonResult)compareWithAge:(Person *)person;
11 
12 @end

person.m

#import "Person.h"

@implementation Person
-(instancetype)initClasses:(NSString *)classes andName:(NSString *)name andAge:(int)age{
    Person *person=[[Person alloc]init];
    person.classes=classes;
    person.name=name;
    person.age=age;
    return person;
}
-(NSComparisonResult)compareWithClassAndName:(Person *)person{
    NSComparisonResult result=[self.classes compare:person.classes];
    if(result==NSOrderedSame){ 
        return [self.name compare:person.name];//如果班级相同,则返回姓名排序的结果
    }else{
        return result;                          //如果班级不同,则返回班级排序结果
    }
}
-(NSComparisonResult)compareWithAge:(Person *)person{
    if(self.age==person.age){
        return NSOrderedSame;
    }else if(self.age>person.age){
        return NSOrderedDescending;
    }else{
        return NSOrderedAscending;
    }

}
-(NSString *)description{
    return [NSString stringWithFormat:@"class:%@ name:%@ age:%d",self.classes,self.name,self.age];
}

@end

 

转载于:https://www.cnblogs.com/jiangyicheng/p/5109988.html

相关文章:

  • oKit项目管理软件正式提供在线服务
  • Red Hat 安装
  • 查看LoadRunner脚本请求日志和服务器返回值方法
  • iOS开发笔记 2、Cocoa简明
  • 烟花散尽漫说无(參考资料)
  • 我也谈谈《驳“永远不要对一个外行聊你的专业”【十全十美】》
  • iOS 界面 之 EALayout 无需反复编译,可视化实时界面,告别Storyboard AutoLayout Xib等等烦人的工具...
  • windows 7 启用虚拟Wifi 热点网络只需3步搞定
  • hibernate将enum映射成int或varchar类型
  • 如果一个按钮被覆盖如何响应?
  • SEO优化的黑帽手法是否值得使用?
  • json.net处理复杂json
  • 各种***批处理
  • 链表 UVA 11988 Broken Keyboard (a.k.a. Beiju Text)
  • 综合力矩分解算法
  • Angular 响应式表单之下拉框
  • CentOS 7 防火墙操作
  • CSS实用技巧干货
  • github从入门到放弃(1)
  • Laravel核心解读--Facades
  • Magento 1.x 中文订单打印乱码
  • Netty源码解析1-Buffer
  • nginx 负载服务器优化
  • select2 取值 遍历 设置默认值
  • Swoft 源码剖析 - 代码自动更新机制
  • vue自定义指令实现v-tap插件
  • windows下mongoDB的环境配置
  • 阿里云购买磁盘后挂载
  • 安装python包到指定虚拟环境
  • 测试如何在敏捷团队中工作?
  • 程序员该如何有效的找工作?
  • 大快搜索数据爬虫技术实例安装教学篇
  • 大主子表关联的性能优化方法
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 构造函数(constructor)与原型链(prototype)关系
  • 你真的知道 == 和 equals 的区别吗?
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 前端之Sass/Scss实战笔记
  • 驱动程序原理
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 删除表内多余的重复数据
  • 微服务框架lagom
  • 我是如何设计 Upload 上传组件的
  • 异步
  • 在Docker Swarm上部署Apache Storm:第1部分
  • Hibernate主键生成策略及选择
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ###项目技术发展史
  • #define 用法
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (C++)八皇后问题
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (LeetCode 49)Anagrams
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (轉)JSON.stringify 语法实例讲解