reference from :http://mobile.51cto.com/hot-434804.htm

1.构建Person类

Person.h

@interface Person : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *surname;
@property (nonatomic, strong) NSDate *dateOfBirth;
@end

2. 初始化ObjSort对象排序功能,包含一个NSArray数组,数组元素为自定义Person

ObjSort.h

/**
* 对NSArray自定义对象排序类
*/
@interface ObjSort : NSObject
-(void)personsSort_NSComparator;//NSComparator比较器
@end

ObjSort.m

@interface ObjSort()
@property (nonatomic, strong) NSMutableArray *personObjs;//存储了若干个Person类对象的数组
@end @implementation ObjSort /**
* 初始化对象
* 初始化NSMutableArray数组personObjs的初始内容, 包装Person类对象
*/
-(instancetype)init{
self = [super init];
if (self == nil) {
return nil;
} NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"dd/MM/yyyy"]; Person *person[5];
for(int i=0; i<5; i++){
person[i] = [[Person alloc] init];
} person[0].name = @"Smith";
person[0].surname = @"John";
person[0].dateOfBirth = [formatter dateFromString:@"03/01/1984"]; person[1].name = @"Andersen";
person[1].surname = @"Jane";
person[1].dateOfBirth = [formatter dateFromString:@"16/03/1979"]; person[2].name = @"Clark";
person[2].surname = @"Anne";
person[2].dateOfBirth = [formatter dateFromString:@"13/09/1995"]; person[3].name = @"Smith";
person[3].surname = @"David";
person[3].dateOfBirth = [formatter dateFromString:@"19/07/1981"]; person[4].name = @"Johnson";
person[4].surname = @"Rose";
person[4].dateOfBirth = [formatter dateFromString:@"22/02/1989"]; if (_personObjs==nil) {
_personObjs = [[NSMutableArray alloc] initWithCapacity:5];
}
for (int i=0; i<5; i++) {
[_personObjs addObject:person[i]];
} [self showPersons:_personObjs];
return self;
} /**
* 日志打印输出当前NSArray内容
*/
-(void)showPersons:(NSArray *)array{
Person *person; if (_personObjs == nil) {
NSLog(@"nil");
} for (int i =0; i< [array count]; i++) {
person = [array objectAtIndex:i];
if ([person isKindOfClass:[Person class]]) {
NSLog(@"---Person %d---", i);
NSLog(@"Name: %@", person.name);
NSLog(@"Surname: %@", person.surname);
NSLog(@"DateOfBirth: %@", person.dateOfBirth);
}
else{
NSLog(@"Object in personObjs is not Person class object.");
}
}
  NSLog(@"All person print over.\n\n");
}

方法一:NSComparator block + NSArray的 sortedArrayUsingSelector

在ObjSort中实现方法personsSort_NSComparator

/**
* 采用NSComparator比较的排序方法
*/
-(void)personsSort_NSComparator{ NSComparator sortBlock = ^(Person *p1 , Person *p2){
NSComparisonResult r1 = [p1.name compare:p2.name];
if(r1 != NSOrderedSame){
return r1;
}else {
NSComparisonResult r2 = [p1.surname compare:p2.surname];
if (r2 != NSOrderedSame)
return r2;
else
return [p1.dateOfBirth compare:p2.dateOfBirth];
}
};
NSArray *personList = [self.personObjs sortedArrayUsingComparator:sortBlock];
NSArray *personList = [self.personObjs sortedArrayUsingSelector:@selector(compare:)];
[self showPersons:personList];
}

方法二:利用对象的自定义方法compare:

Person.m中添加

-(NSComparisonResult)compare:(Person *)otherPerson{
NSComparisonResult r1 = [self.name compare:otherPerson.name];
if(r1 != NSOrderedSame){
return r1;
}else {
NSComparisonResult r2 = [self.surname compare:otherPerson.surname];
if (r2 != NSOrderedSame)
return r2;
else
return [self.dateOfBirth compare:otherPerson.dateOfBirth];
}
return [self.name compare:otherPerson.name];
}

ObjSort.m中添加

/**
* 采用自定义对象自定义函数compare进行NSArray排序
*/
-(void)personsSort_CustomCompare{
NSArray *personList = [self.personObjs sortedArrayUsingSelector:@selector(compare:)];
[self showPersons:personList];
}

在ObjSort.h中添加响应的接口

/**
* 对NSArray自定义对象排序类
*/
@interface ObjSort : NSObject
-(void)personsSort_NSComparator;//NSComparator比较器
-(void)personsSort_CustomCompare;//对象自定义比较方法Compare
@end

最后,在main.m(排序调用处)添加

        ObjSort *objSort = [[ObjSort alloc] init];
[objSort personsSort_NSComparator];

方法一结果

---Person ---
Name: Smith
Surname: John
DateOfBirth: -- :: +
---Person ---
Name: Andersen
Surname: Jane
DateOfBirth: -- :: +
---Person ---
Name: Clark
Surname: Anne
DateOfBirth: -- :: +
---Person ---
Name: Smith
Surname: David
DateOfBirth: -- :: +
---Person ---
Name: Johnson
Surname: Rose
DateOfBirth: -- :: +
All person print over. ---Person ---
Name: Andersen
Surname: Jane
DateOfBirth: -- :: +
---Person ---
Name: Clark
Surname: Anne
DateOfBirth: -- :: +
---Person ---
Name: Johnson
Surname: Rose
DateOfBirth: -- :: +
---Person ---
Name: Smith
Surname: David
DateOfBirth: -- :: +
---Person ---
Name: Smith
Surname: John
DateOfBirth: -- :: +
All person print over.

方法二结果

---Person ---
Name: Smith
Surname: John
DateOfBirth: -- :: +
---Person ---
Name: Andersen
Surname: Jane
DateOfBirth: -- :: +
---Person ---
Name: Clark
Surname: Anne
DateOfBirth: -- :: +
---Person ---
Name: Smith
Surname: David
DateOfBirth: -- :: +
---Person ---
Name: Johnson
Surname: Rose
DateOfBirth: -- :: +
All person print over. ---Person ---
Name: Andersen
Surname: Jane
DateOfBirth: -- :: +
---Person ---
Name: Clark
Surname: Anne
DateOfBirth: -- :: +
---Person ---
Name: Johnson
Surname: Rose
DateOfBirth: -- :: +
---Person ---
Name: Smith
Surname: David
DateOfBirth: -- :: +
---Person ---
Name: Smith
Surname: John
DateOfBirth: -- :: +
All person print over.

NSArary自定义对象排序 NSComparator, compare的更多相关文章

  1. ht-8 对arrayList中的自定义对象排序( Collections.sort(List<T> list, Comparator<? super T> c))

    package com.iotek.set; import java.util.ArrayList; import java.util.Collections; import java.util.Co ...

  2. Object-C中的排序和Compare陷阱

    来源:http://m.blog.csdn.net/blog/u011883764/38868097 Date : 2015-12-24 一.Compare陷阱 NSString有多个compare相 ...

  3. Java基础知识强化之集合框架笔记69:Collections类之ArrayList存储自自定义对象并排序的案例

    1. ArrayList存储自自定义对象并排序的案例: ArrayList存储自自定义对象,并使用Collections对ArrayList存储基本包装类的元素排序. 2. 代码实现: (1)Stud ...

  4. Java:集合,对列表(List)中的自定义对象按属性(字段)排序(正序、倒序)的方法

    1. 要求 对列表(List)中的自定义对象,要求能够按照对象的属性(字段)进行排序(正序.倒序). 如:用户对象(Member)有用户名(username).级别(level).出生日期(birth ...

  5. TreeSet 比较器排序 自定义对象

    package cn.itcast.day21.treeset2; import java.util.Comparator; import java.util.TreeSet; /* * TreeSe ...

  6. TreeMap 底层是红黑树 排序是根据key值进行的 添加元素时异常 Comparable异常 Comparator比较自定义对象放在键的位置

    package com.swift; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; ...

  7. Java基础知识强化之集合框架笔记46:Set集合之TreeSet存储自定义对象并遍历练习2(自然排序:Comparable)

    1. TreeSet存储自定义对象并遍历练习2: (1)Student.java package cn.itcast_06; /* * 如果一个类的元素要想能够进行自然排序,就必须实现自然排序接口 * ...

  8. Java基础知识强化之集合框架笔记45:Set集合之TreeSet存储自定义对象并遍历练习1(自然排序:Comparable)

    1. 自然排序: TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间的大小关系,然后将集合元素按照升序排列,这种方式就是自然排序. Java中提供了一个Comp ...

  9. 《java入门第一季》之TreeSet存储自定义对象并保证排序和唯一

    上一篇用一个简单的例子,介绍了treeset集合存储的内部过程,这里再完善其存储自定义对象保证唯一. 需求:A:  * 自然排序,按照年龄从小到大排序  *         B:  * 成员变量值都相 ...

随机推荐

  1. Spring Boot 定时任务 Quartz 使用教程

    Quartz是一个完全由java编写的开源作业调度框架,他使用非常简单.本章主要讲解 Quartz在Spring Boot 中的使用. 快速集成 Quartz 介绍 Quartz 几个主要技术点 Qu ...

  2. traceback说明

    一:traceback说明 该模块提供了一个标准接口来提取,格式化和打印Python程序的堆栈跟踪.它完全模仿Python解释器在打印堆栈跟踪时的行为.当您想要在程序控制下打印堆栈跟踪时,这很有用. ...

  3. ASA防火墙忘记密码之后的恢复步骤

    ASA的密码恢复方法与路由器相似,修改配置寄存器的值,启动时绕过startup-config配置文件,重新配置密码. 密码恢复的步骤如下: (1)重新插拔电源线,重启ASA (2)按ESC键或Ctrl ...

  4. 影响IPSec的网络问题

    影响IPSec VPN的网络问题:①.动态地址问题:两个 站点之间IPSec VPN的条件是站点之间有固定的IP地址,假如说分支站点采用ADSL上网链路,那么其IP地址是动态的,那么就在VPN时出现问 ...

  5. Cisco AP-如何调整LAP信道

    GUI方法: CLI的方法:根据对应的接口去调整信道,信道带宽,传输功率等信息吧.(Cisco Controller) >config slot 0 antenna Configures the ...

  6. 2016-2017学年第三次测试赛 问题 F: 签到题

    问题 F: 签到题 时间限制: 1 Sec  内存限制: 128 MB提交: 80  解决: 28 提交统计讨论版 题目描述 在计算机网络考试中, 黑帅男神看到一个将IP网络分类的题, 精通C++的他 ...

  7. php对象、面向对象

    对象 万物皆对象 一切可见之物都是对象 一切不可见之物也是(抽象的事物也是对象): 对象包含两部分 1对象的组成元素 对象的数据模型又称为对象的属性,又被称为对象的成员变量 2.对象的行为 是对象的行 ...

  8. Update(Stage5):DMP项目_业务介绍_框架搭建

    DMP (Data Management Platform) 导读 整个课程的内容大致分为如下两个部分 业务介绍 技术实现 对于业务介绍, 比较困难的是理解广告交易过程中各个参与者是干什么的 对于技术 ...

  9. iOS 开发中常用的排序(冒泡、选择、快速、插入、希尔、归并、基数)算法

    1.冒泡排序: 冒泡算法是一种基础的排序算法,这种算法会重复的比较数组中相邻的两个元素.如果一个元素比另一个元素大(小),那么就交换这两个元素的位置.重复这一比较直至最后一个元素.这一比较会重复n-1 ...

  10. leetCode练题——26. Remove Duplicates from Sorted Array

    1.题目 26. Remove Duplicates from Sorted Array--Easy Given a sorted array nums, remove the duplicates  ...