利用数组的sortedArrayUsingComparator调用
NSComparator 

当中NSComparator事实上就是一个返回NSComparisonResult的block。

typedef NSComparisonResult (^NSComparator)(id obj1,
id obj2); 当中obj1、obj2事实上是NSArray中的元素

    resultArray = [arrayDic <span style="color:#009900;">sortedArrayUsingComparator:</span>^NSComparisonResult(id obj1, id obj2) {
NSNumber * number1 = [[obj1 allKeys] objectAtIndex:0];
NSNumber * number2 = [[obj2 allKeys] objectAtIndex:0];
NSComparisonResult result = [number1 compare:number2];
return result == NSOrderedAscending;
}];

利用数组的sortedArrayUsingFunction 调用 相应方法customSort

NSInteger <span style="color:#ff9900;">sortByID</span>(id obj1, id obj2, void *context){
NSString *str1 =(NSString*) obj1; // ibj1 和 obj2 来自与你的数组中,事实上,个人认为是苹果自己实现了一个冒泡排序给大家使用
NSString *str2 =(NSString *) obj2;
if (str1.length < str2.length) {
<span style="white-space:pre"> </span>return NSOrderedDescending;
}
else if(str1.length == str2.length)
{
<span style="white-space:pre"> </span>return NSOrderedSame;
}
<span style="white-space:pre"> </span>return NSOrderedAscending;
}
NSArray *sortedArray =[arr sortedArrayUsingFunction:sortByID context:nil];

#利用数组的sortedArrayUsingSelector调用
相应的SEL的方法

注意selector的方法是对数组元素而言的方法,假如数据元素没有compare:方法。能够通过扩展数组元素的类添加对应的方法。      

    NSMutableArray *arrayDic = [NSMutableArray arrayWithObjects:
[NSDictionary dictionaryWithObjectsAndKeys:@"Obj0", [NSNumber numberWithInt:0], nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"Obj5", [NSNumber numberWithInt:5], nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"Obj2", [NSNumber numberWithInt:2], nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"Obj3", [NSNumber numberWithInt:3], nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"Obj1", [NSNumber numberWithInt:1], nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"Obj4", [NSNumber numberWithInt:4], nil], nil];
#ifdef sortedArrayUsingSelector
resultArray = [arrayDic sortedArrayUsingSelector:@selector(compare:)];

由于数组中元素相应的是字典,所以对字典的类进行扩展

@implementation NSDictionary (extend)
- (NSComparisonResult)compare: (NSDictionary *)otherDictionary
{
NSNumber *number2 = [[otherDictionary allKeys] objectAtIndex:0];
NSDictionary *tempDictionary = (NSDictionary *)self;
NSNumber *number1 = [[tempDictionary allKeys] objectAtIndex:0];
NSComparisonResult result = [number1 compare:number2]; // return result == NSOrderedDescending; // 升序
return result == NSOrderedAscending; // 降序
}

#利用数组的sortUsingDescriptors调用NSSortDescriptor

NSSortDescriptor 能够简单的理解为  指定对象的某属性的比較描写叙述。

    /**
* 能够非常方便的依据model对象中的某个属性进行排序
* sortDescriptor1 数组依据name进行升序排
* sortDescriptor2 数组依据age进行降序排
* 同一时候将两种sortDescriptor增加数组,是指先依照name排序,name同样的依照age排序
*/
Person *person1 = [[Person alloc] init];
[person1 setName:@"ABC"];
[person1 setAge:24]; Person *person2 = [[Person alloc] init];
[person2 setName:@"ACB"];
[person2 setAge:22]; Person *person3 = [[Person alloc] init];
[person3 setName:@"ABD"];
[person3 setAge:33];
NSMutableArray *array = [NSMutableArray arrayWithObjects:person1, person2, person3, nil];
NSSortDescriptor *sortDescriptor1 = [NSSortDescriptor <span style="color:#ff0000;">sortDescriptorWithKey</span>:@"_name" ascending:YES];
NSSortDescriptor *sortDescriptor2 = [NSSortDescriptor <span style="color:#ff0000;">sortDescriptorWithKey</span>:@"_age" ascending:NO];
resultArray = [array sortedArrayUsingDescriptors:[NSArray arrayWithObjects:sortDescriptor1,sortDescriptor2,nil]];
for(NSInteger i = 0; i < [resultArray count]; i++)
{
NSLog(@"%@--------%d\n", [[resultArray objectAtIndex:i] name], [[resultArray objectAtIndex:i] age]);
}

关于NSArray的几种排序:的更多相关文章

  1. Object-c学习之路八(NSArray(数组)遍历和排序)

    今天学习了NSArray的遍历和排序,现在在这里做一下总结: 遍历现在实现了四中方法: 排序大概有三中方法:(代码中都有注释) 关于对象的排序还是以Student和Book为例 每个Student持有 ...

  2. Objective-C实现常用的4种排序算法

    OC实现的4种排序又来了! 4种排序分别是:快速排序.冒泡排序.选择排序.插入排序,其他的我就不写了,因为OC里的数组中不能存放基本数据类型,如int不能存放,只能放对象,所以所有的数据我用了NSNu ...

  3. iOS可视化动态绘制八种排序过程

    前面几篇博客都是关于排序的,在之前陆陆续续发布的博客中,我们先后介绍了冒泡排序.选择排序.插入排序.希尔排序.堆排序.归并排序以及快速排序.俗话说的好,做事儿要善始善终,本篇博客就算是对之前那几篇博客 ...

  4. 模板化的七种排序算法,适用于T* vector<T>以及list<T>

    最近在写一些数据结构以及算法相关的代码,比如常用排序算法以及具有启发能力的智能算法.为了能够让写下的代码下次还能够被复用,直接将代码编写成类模板成员函数的方式,之所以没有将这种方式改成更方便的函数模板 ...

  5. 几种排序算法的学习,利用Python和C实现

    之前学过的都忘了,也没好好做过总结,现在总结一下. 时间复杂度和空间复杂度的概念: 1.空间复杂度:是程序运行所以需要的额外消耗存储空间,一般的递归算法就要有o(n)的空间复杂度了,简单说就是递归集算 ...

  6. ACM 一种排序

    一种排序 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复:还知道这个长方形的宽和长,编号.长.宽都是整数 ...

  7. 秒杀9种排序算法(JavaScript版)

    一:你必须知道的 1> JS原型 2> 排序中的有序区和无序区 3> 二叉树的基本知识 如果你不知道上面三个东西,还是去复习一下吧,否则,看下面的东西有点吃力. 二:封装丑陋的原型方 ...

  8. nyoj 8 一种排序

    一种排序 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复:还知道这个长方形的宽和长,编号.长.宽都是整数 ...

  9. JavaScript新手学习笔记3——三种排序方式(冒泡排序、插入排序、快速排序)

    每种编程语言学到数组的时候,都会讲到排序算法,当时学C语言的时候,卡在排序算法.今天来总结一下javascript中如何实现三种排序算法. 1.冒泡排序(默认升序排列哦) 原理: 冒泡排序的原理,顾名 ...

随机推荐

  1. Mac中MacPorts安装和使用

    文章转载至http://www.zikercn.com/node/8 星期四, 06/07/2012 - 19:02 - 张慧敏 MacPorts简单介绍 MacPorts,以前叫做DarwinPor ...

  2. Why Python?

    Python is object-oriented Structure supports such concepts as polymorphism , operation overloading , ...

  3. HBase概念学习(七)HBase与Mapreduce集成

    这篇文章是看了HBase权威指南之后,依据上面的解说搬下来的样例,可是略微有些不一样. HBase与mapreduce的集成无非就是mapreduce作业以HBase表作为输入,或者作为输出,也或者作 ...

  4. Tomcat设置成NIO时,使用的线程池

    设置成NIO时, <Connector port="8088" protocol="org.apache.coyote.http11.Http11NioProtoc ...

  5. 50个Android开发技巧(11 为文字加入特效)

    问题:怎样构建一个模拟LED数字时钟的页面?效果例如以下图所看到的: (原文地址:http://blog.csdn.net/vector_yi/article/details/24460227) 分析 ...

  6. 增强SEO的div+css命名规则

    页头:header登录条:loginBar标志:logo侧栏:sideBar广告:banner导航:nav子导航:subNav菜单:menu子菜单:subMenu搜索:search滚动:scroll页 ...

  7. Python全栈开发

    Python全栈开发 一文让你彻底明白Python装饰器原理,从此面试工作再也不怕了. 一.装饰器 装饰器可以使函数执行前和执行后分别执行其他的附加功能,这种在代码运行期间动态增加功能的方式,称之为“ ...

  8. 基于visual Studio2013解决C语言竞赛题之1059最大平台

       题目 解决代码及点评 /* 功能:编写求最大平台问题的程序. 有n个整数a1,a2, ... an, 若满足a1≤a2≤ ... ≤ an , 则认为在这n个数中有最大平台.在这种情 ...

  9. android——写xml

    在PersonService的基础上,加上savePersons(·····),这时的PersonService为: package com.njupt.xml; import java.io.Fil ...

  10. gulp工作流

    小屁活动使用 gulp+less gulpfile.js var gulp = require('gulp'), cssmin = require('gulp-minify-css'), less = ...