Object-C,NSArraySortTest,数组排序3种方式
晚上回来,继续写Object-C的例子,今天不打算写iOS可视化界面的程序,太累了。
刚刚dady又电话过来,老一套,烦死了。
其实,我一直一个观点,无论发生什么事情,不要整天一副不开心的样子。
开开心心过日子,活着就要懂得珍惜。
刚刚写了数组排序,有3种方法,使用对象自带的compare方法、传入比较函数、匿名函数-代码块。
个人认为,本质是2种方法。
一种是,类似Java中的对象,实现Comparable接口的compareTo方法。
一种是,传入比较器Comparator,比较灵活。
代码
//
// main.m
// NSArraySort
//
// Created by fansunion on 15/12/2.
// Copyright (c) 2015年 demo. All rights reserved.
// #import <Foundation/Foundation.h> //需要定义在main函数之前,和C语言一样,和java不一样
//比较函数,降序排列
NSComparisonResult intSort(id a,id b,void* context){
int v1 = [a intValue];
int v2 = [b intValue];
if(v1 > v2){
return NSOrderedAscending;
}else if(v1 < v2){
return NSOrderedDescending;
}else{
return NSOrderedSame;
}
} int main(int argc, const char * argv[]) {
@autoreleasepool {
//字符串数组,使用自带的compare方法排序。相当于Java中对象实现Comparable接口的compareTo方法
NSArray* strArray = @[@"Java",@"Android",@"Object-C"];
strArray = [strArray sortedArrayUsingSelector:@selector(compare:)];
NSLog(@("%@"),strArray);
//整型数组,传入比较函数。相当于Java中传入Comparator对象,这种方式更加灵活。
NSArray* numberArray =@[[NSNumber numberWithInteger:2015],[NSNumber numberWithInt:1949],[NSNumber numberWithInt:2020]];
numberArray = [numberArray sortedArrayUsingFunction:intSort context:nil];
NSLog(@"%@",numberArray);
//使用代码块比较,进行排序(和第2种方法感觉没啥区别啊),升序
NSArray* numberArrayAsc =[numberArray sortedArrayUsingComparator:^(id a,id b){
int v1 = [a intValue];
int v2 = [b intValue];
if(v1 > v2){
return NSOrderedDescending;
}else if(v1 < v2){
return NSOrderedAscending;
}else{
return NSOrderedSame;
}
}];
NSLog(@"%@",numberArrayAsc);
}
return 0;
}
程序输出
2015-12-02 20:39:09.500 NSArraySort[5534:380948] (
Android,
Java,
"Object-C"
)
2015-12-02 20:39:09.502 NSArraySort[5534:380948] (
2020,
2015,
1949
)
2015-12-02 20:39:09.502 NSArraySort[5534:380948] (
1949,
2015,
2020
)
Program ended with exit code: 0
Object-C,NSArraySortTest,数组排序3种方式的更多相关文章
- iOS 开发系列:CoreData Object 变成 Fault 的一种方式
@quote: 近来一直与 CoreData 打交道.这是一个架构庞大.学习曲线比較陡峭的 iOS 组件,每次遇到问题都会对其有新的认识. 这次就仅仅讲一点,关于错误认知 Object(NSManag ...
- 对数组排序三种方式sort、asort与ksort
关联数组是 键值(key)=>值(value)形式. sort只对值进行排序,键值不参与排序: asort对值进行排序,键值参与排序: ksort对键值进行排序,值参与排序: 实例,比如数组: ...
- map和object互转的几种方式
1.使用Apache中的BeanUtils类,导入commons-beanutils包. 2.使用JSON 3.利用java.lang.reflect.Field类完成Obj和Map之间的相互转换 h ...
- 多线程通信的两种方式? (可重入锁ReentrantLock和Object)
(一)Java中线程协作的最常见的两种方式: (1)利用Object的wait().notify()和notifyAll()方法及synchronized (2)使用Condition.Reentra ...
- 两种方式实现浅拷贝 for in实现和Object.assign({}, 对象1, 对象2);
浅拷贝只拷贝对象的一层,如果对象的属性还是对象,那么user3和user4这两个对象对应的值都会发生改变 // 拷贝分为浅拷贝和深拷贝. // 浅拷贝的实现 通过for in实现 var user1 ...
- springmvc+jpa实现分页的两种方式
1.工具类 public final class QueryTool { public static PageRequest buildPageRequest(int pageNumber, int ...
- .NET 实现并行的几种方式(三)
本随笔续接:.NET 实现并行的几种方式(二) 在前两篇随笔中,先后介绍了 Thread .ThreadPool .IAsyncResult (即 APM系列) .Task .TPL (Task Pa ...
- .NET 实现并行的几种方式(一)
好久没有更新了,今天来一篇,算是<同步与异步>系列的开篇吧,加油,坚持下去(PS:越来越懒了). 一.Thread 利用Thread 可以直接创建和控制线程,在我的认知里它是最古老的技术了 ...
- 《连载 | 物联网框架ServerSuperIO教程》- 10.持续传输大块数据流的两种方式(如:文件)
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...
随机推荐
- Mysql ERROR 1067: Invalid default value for 字段
问题: //今天把一个数据库的sql文件导入到另一个数据库出现以下异常: Mysql ERROR 1067: Invalid default value for 字段 //原因是因为之前导出数据里面有 ...
- pythone 学习笔记(粗略)
文档目录 概述 安装 基本语法 数据结构 4.1 数字和字符串类型 4.2 元祖 4.3 列表 4.4 字典 流程语句 5.1 分支结构 5.2 逻辑运算符(if) 5.3 循环 5.3.1 for ...
- 利用Arcade表达式显示多行标签
要素图层依然是全球气象站点分布数据,属性表如下: 展示效果如下,显示的四行数据分别是属性表中的WIND_NAME,TEMP,WIND(运算之后的),R_HUMIDITY 本次尝试一次性写全所有的信息: ...
- JAVA面向对象编程深入理解图
- Android开发进度01
1,今日:目标:完成eclipse中Android sdk和ADT的创建,下载tools工具,创建Android虚拟机 2,昨天:无 3,收获:Android sdk manager需要下载的东西:学 ...
- ASP.NET-前台view返回model集合
有时操作列表的时候想一次提交一个model集合,这样后台controller直接接受后就可以直接进行操作了,不用使用js,比较方便,也体现了MVC的Binding模式的优势,方法如下: 准备: 1.两 ...
- SQL SERVER-数据库的远程访问解决办法
除了下面的这个RemoteDacEnabled更改为true之后,还要把防火墙关闭,才能通过IP地址访问数据库 来自为知笔记(Wiz)
- 讲一讲java异常及自定义异常
1.异常,说白了.两种,一种就是就是不能让代码通过编译的异常.另一种就是程序运行期间出现的异常.异常就是错误,只要出现异常,程序就不会向下运行了.就不会执行后面的代码了.这时候就可以通过显示statc ...
- JavaFX学习之道:JavaFX之TableView
TableView表 TableColumn列 构建一个表主要有TableView,TableColumn,ObservableList,Bean. 加入列table.getColumns ...
- JavaScript DOM(一)
文件夹: DOM家谱树 节点的基本属性和方法 document与getElement方法 DOM家谱树 DOM能够将不论什么HTML或XML文档描绘成一个由多层次节点构成的结构.当中节点被分为几种不同 ...