// 为集合字符串排序(cmpare:)

// - null :空类型  就是字符型的0;

// - [NSNull null]是对象类型,能够存入集合的数据:为其分配了内存,但其中的值为空(不能被排序否则程序会崩溃);

// - 对非对象类型指针赋空值用null(如C指针)

// 对集合内的字符串排序:调用排序方法后会创建一个新的集合返回

// - sortedArrayUsing...(sort:分类)

NSArray *group = @[@"red", @"green", @"blue"];

// 1.选择器排序:调用系统的排序方法,即字符串的比较方法

NSArray *reorder_S = [group sortedArrayUsingSelector:@selector(compare:)];

NSLog(@"selector:%@", reorder_S);

// 2.描述排序

// - 提取排序的信息

// > Key:没有key所以使用nil(为自定义对象排序Key就是排序的属性)

// > ascending:布尔类型,YES为升序(ASKII码值)

// - 为方法传递排序的参数

NSSortDescriptor *group_D = [NSSortDescriptor sortDescriptorWithKey:nil ascending:NO];

NSArray *reorder_D = [group sortedArrayUsingDescriptors:@[group_D]];

NSLog(@"descriptor:%@", reorder_D);

// 3.代码块排序:也是调用字符串的比较方法

NSArray *reorder_B = [group sortedArrayUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) {return [obj1 compare:obj2];}];

NSLog(@"block:%@",reorder_B);

// - 参数:不会影响排序的顺序

// > SortCurrent:并行排序,即多线程排序,特点:安全性不好

// > SortStable:串行排序,即打单步执行:数据庞大可能效率有点低

// - block的实现,因为是取值两两比较:使用结果仅有三个,根据返回结果就确定大小然后进行返回

reorder_B = [group sortedArrayWithOptions:NSSortStable usingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) { return [obj1 compare:obj2]; }];

NSLog(@"block:%@",reorder_B);

转载于:https://www.cnblogs.com/pruple/p/5252207.html

为集合排序的三个方法相关推荐

  1. C++结构体多级排序的三种方法

    C++结构体多级排序的三种方法 struct node{int chinese,math;char name[15]; }; 需求:按数学成绩从大到小排序  1.自定义比较器 //自定义比较函数 bo ...

  2. Excel电子表格排序的三种方法

    排序是数据处理中的经常性工作,Excel排序有序数计算(类似成绩统计中的名次)和数据重排两类.本文以几个车间的产值和名称为例,介绍Excel 2000/XP的数据排序方法. 一.数值排序 1.RANK ...

  3. Python中给字典排序的三种方法(有一种你绝对没见过)

    我们经常在计算机等级考试中遇到词频排序的问题,我们一般先通过生成字典的方法,统计词的频次,然后给字典排序.那么如何快速地给字典按照键值进行排序呢?下面介绍三种方法.第一种方法相对比较常见,但是第二种方 ...

  4. Collection集合和Map集合循环遍历三种方法

    Collection集合的四种遍历方式: 1.迭代器 public static void main(String[] args) {List<String> list = new Arr ...

  5. java中集合的排序_Java中集合排序的两种方法

    import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.u ...

  6. Java中Map集合遍历的三种方法

    1.通过keySet()方法来遍历,此方法可以得到对应的key和value: 举一个Demo: package map;import java.util.HashMap; import java.ut ...

  7. Java中对List集合排序的两种方法

    第一种方法,就是list中对象实现Comparable接口,代码如下: public class Person implements Comparable<Person> {private ...

  8. 统计日志中ip访问次数并排序的三种方法

    1  利用linux中的awk命令 grep "GET aaa.log | awk -F " " '{print $NF}' >d:/test.log 假设日志的最 ...

  9. 计算机启动应用程序的方法,excel的程序_Excel2010中启动应用程序的三种方法

    使用Excel时,需要先启动应用程序,怎么去进行操作启动它?今天,学习啦小编就教大家在Excel2010中启动应用程序的三种方法. Excel2010中启动应用程序的三种步骤如下: 1.开始菜单 在桌 ...

最新文章

  1. 批量创建用户和设置密码
  2. Webpack 4 api 了解与使用
  3. 40款奇特的名片设计,吸引大家的眼球《上篇》
  4. firefox英文网页乱码解决方法
  5. Python中a和a[:]有什么区别?
  6. PHP Module
  7. 跨平台、跨语言应用开发工具,Elements 介绍
  8. 2018 .NET开发者调查报告: .NET Core 是怎么样的状态
  9. grpc ssl使用
  10. logback AbstractLogstashTcpSocketAppender 源码解析
  11. 【Java笔记】IO流(2):字符流
  12. eclipse安装lua
  13. vcenter 进入 Linux 操作模式
  14. 【图像去噪】基于matlab中值滤波图像去噪【含Matlab源码 421期】
  15. 解析bt种子下载 java_使用Java解析Torrent文件(BT种子),基于使用Eclipse ECF中的org.eclipse.bittorrent方案...
  16. Mac上mysql默认端口那件事
  17. 印象笔记如何与微信连接到服务器,如何保存微信和微博到印象笔记?
  18. linux查看pci设备枚举,Linux 枚举PCI设备
  19. 抽奖随机滚动_如何在party上用来宾的照片抽奖
  20. 腾讯视频播放插件Txplayer的使用

热门文章

  1. servle 3.0 新特性之一 对上传表单的支持
  2. '固定' table宽度,走起!
  3. struts2-通配符和动态方法调用
  4. 什么是spring(转载)
  5. pca各个向量之间的相关度_PCA主成分分析
  6. libevent简介和使用
  7. git编辑器选哪个_[Git]Git创建和修改代码库
  8. Python实战应用-Clumper库函数全解析
  9. 人工智能超强面经:文本检测与GAN篇(含答案)
  10. 职称考试取消英语和计算机,强烈建议取消所谓的英语职称和计算机考试