Sort方法的扩展

OC中类方法中只为我们提供了一些降序方法,现在我们自己定义方法,实现升序.

1.要求:定义一个Person类,实例变量包括name,age,height,定义几个对象,把这些对象保存在数组中,自己定义方法,实现数组按name,age,gheight的升序排列输出.

首先Person.h文件

#import <Foundation/Foundation.h>

@interface Person : NSObject{
    NSString *_name;//姓名
    NSInteger _age;//年龄
    CGFloat _height;//身高
}
//初始化
- (id)initWithName:(NSString *)name age:(NSInteger)age height:(CGFloat)height;
//姓名
- (void)setName:(NSString *)name;
- (NSString *)name;

//年龄
- (void)setAge:(NSInteger)age;
- (NSInteger)age;

//身高
- (void)setHeight:(CGFloat)height;
- (CGFloat)height;
//比较age
- (NSComparisonResult)compareByAge:(Person *)anPerson;
//比较身高
- (NSComparisonResult)compareByHeight:(Person *)anPerson;

//比较名字升序
- (NSComparisonResult)compareByName:(Person *)anPerson;
//名字降序
- (NSComparisonResult)compareByNameDesceding:(Person *)anPerson;

Person.m文件

#import "Person.h"

@implementation Person
#pragma mark - setter and getter

//set姓名
- (void)setName:(NSString *)name{
    _name = name;
}
- (NSString *)name{
    return _name;
}

//set年龄
- (void)setAge:(NSInteger)age{
    _age = age;
}
- (NSInteger)age{
   return _age;
}

//set身高
- (void)setHeight:(CGFloat)height{
    _height = height;
}
- (CGFloat)height{
    return _height;
}
#pragma mark - init method
//初始化
- (id)initWithName:(NSString *)name age:(NSInteger)age height:(CGFloat)height{
    self = [super init];
    if (self != nil) {
        _name = name;
        _age = age;
        _height = height;
    }
    return self;
}
#pragma mark - override method
//重写description
- (NSString *)description{
    return [NSString stringWithFormat:@"name:%@ age:%ld, height:%g", _name, _age, _height];
}
#pragma mark - compare
//比较年龄age
- (NSComparisonResult)compareByAge:(Person *)anPerson{
    if ([self age] > [anPerson age]) {
        return NSOrderedDescending;//1 降序
    }else if([self age] == [anPerson age]){  //相等
        return NSOrderedSame;//0
    }else{
        return NSOrderedAscending;//-1  升序
    }
}
//比较身高
- (NSComparisonResult)compareByHeight:(Person *)anPerson{
    if ([self height] > [anPerson height]) {
        return NSOrderedDescending;
    }else if([self height] == [anPerson height]){
        return NSOrderedSame;
    }else{
        return NSOrderedAscending;
    }
}
//比较名字
- (NSComparisonResult)compareByName:(Person *)anPerson{
    return [[self name] compare:[anPerson name]];
}
//名字降序
- (NSComparisonResult)compareByNameDesceding:(Person *)anPerson{
    return -[[self name] compare:[anPerson name]];
}
@end

主函数中main.m调用

#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[])
{

    @autoreleasepool {

        Person *per1 = [[Person alloc] initWithName:@"xiaoshuai" age:12 height:178];
        Person *per2 = [[Person alloc] initWithName:@"xiaomeng" age:22 height:175];
        Person *per3 = [[Person alloc] initWithName:@"xiaoguangguang" age:20 height:180];
        Person *per4 = [[Person alloc] initWithName:@"dapeng" age:30 height:190];
        NSArray *perArr = [[NSArray alloc] initWithObjects:per1,per2,per3,per4, nil];
        //对数组按姓名升序排序
        NSArray *sortArrName = [perArr sortedArrayUsingSelector:@selector(compareByName:)];
        NSLog(@"%@", sortArrName);
        //对数组中年龄升序排序
        NSArray *sortArrAge = [perArr sortedArrayUsingSelector:@selector(compareByAge:)];
        NSLog(@"%@", sortArrAge);
        //对数组中身高按升序排序
        NSArray *sortArrHeight = [perArr sortedArrayUsingSelector:@selector(compareByHeight:)];
        NSLog(@"%@", sortArrHeight);
        //名字降序
        NSArray *sortArrNameDescending = [perArr sortedArrayUsingSelector:@selector(compareByNameDesceding:)];
        NSLog(@"%@", sortArrNameDescending);

     }
    return 0;
}

测试结果:

2014-08-14 22:03:37.650 Lesson_Sort[4908:303] (

"name:dapeng age:30, height:190",

"name:xiaoguangguang age:20, height:180",

"name:xiaomeng age:22, height:175",

"name:xiaoshuai age:12, height:178"

)

2014-08-14 22:03:37.651 Lesson_Sort[4908:303] (

"name:xiaoshuai age:12, height:178",

"name:xiaoguangguang age:20, height:180",

"name:xiaomeng age:22, height:175",

"name:dapeng age:30, height:190"

)

2014-08-14 22:03:37.652 Lesson_Sort[4908:303] (

"name:xiaomeng age:22, height:175",

"name:xiaoshuai age:12, height:178",

"name:xiaoguangguang age:20, height:180",

"name:dapeng age:30, height:190"

)

2014-08-14 22:03:37.652 Lesson_Sort[4908:303] (

"name:xiaoshuai age:12, height:178",

"name:xiaomeng age:22, height:175",

"name:xiaoguangguang age:20, height:180",

"name:dapeng age:30, height:190"

)

Sort方法的扩展,布布扣,bubuko.com

时间: 2024-10-13 04:04:46

Sort方法的扩展的相关文章

java.util.ComparableTimSort中的sort()方法简单分析

TimSort算法是一种起源于归并排序和插入排序的混合排序算法,设计初衷是为了在真实世界中的各种数据中能够有较好的性能. 该算法最初是由Tim Peters于2002年在Python语言中提出的. TimSort 是一个归并排序做了大量优化的版本号. 对归并排序排在已经反向排好序的输入时表现O(n2)的特点做了特别优化.对已经正向排好序的输入降低回溯.对两种情况混合(一会升序.一会降序)的输入处理比較好. 在jdk1.7之后.Arrays类中的sort方法有一个分支推断,当LegacyMerge

Javascript中数组方法以及数组方法的扩展--基础篇

最近一直在努力的恶补javascript中的各种知识,比如说闭包,作用域,继承,构造函数,变量,内置对象等概念.同时,也在学习着ES6的新知识.最近想给大家分享的就是数组实例方法的练习以及如何去扩展一个数组方法. 以下的分享会分为如下内容 1.数组实例方法的练习 1.1:reduce() 1.2:map() 1.3:sort() 1.4:slice() 1.5:push() 1.6:实例方法习题 2.数组方法的扩展 1.数组实例方法的练习 首先,我们应该知道数组实例方法有哪些. console.

Python中的sort()方法的使用

本文和大家分享的主要是python中的sort()方法相关知识,一起来看看吧,希望对大家学习python有所帮助. 一.基本形式 sorted(iterable[, cmp[, key[, reverse]]]) iterable.sort(cmp[, key[, reverse]]) 参数解释: (1)iterable指定要排序的list或者iterable,不用多说: (2)cmp为函数,指定排序时进行比较的函数,可以指定一个函数或者lambda函数,如: students为类对象的list

Python中的sort()方法使用基础

一.基本形式 sorted(iterable[, cmp[, key[, reverse]]]) iterable.sort(cmp[, key[, reverse]]) 参数解释: (1)iterable指定要排序的list或者iterable,不用多说: (2)cmp为函数,指定排序时进行比较的函数,可以指定一个函数或者lambda函数,如: students为类对象的list,没个成员有三个域,用sorted进行比较时可以自己定cmp函数,例如这里要通过比较第三个数据成员来排序,代码可以这

来看看两种好玩的方法,扩展方法和分布方法

好久没过来扯淡了,话说这年头还有偶遇的事情吗?比如国庆回家的汽车上有个妹子要你qq,要你微信,想着法子跟你聊天,然后睡了一觉,醒来发现 肾不见了?小花絮小花絮,要是肾真没了,也吹不了牛,败不了火了,继续言归正传. 一:扩展方法 说到扩展方法,我想大家都已经再熟悉不过了,也许你的解决方案中有无数个这样的扩展方法,自从有了Linq之后,我们的集合就再也不单纯了. 从下面的Linq类中,所有的方法都扩展在IEnumerable<T>上,恰恰我们的集合都继承于IEnumerable接口下面. 然后我们

Collections中sort()方法源代码的简单分析

Collections的sort方法代码: public static <T> void sort(List<T> list, Comparator<? super T> c) { Object[] a = list.toArray(); Arrays.sort(a, (Comparator)c); ListIterator i = list.listIterator(); for (int j=0; j<a.length; j++) { i.next(); i.

定制对ArrayList的sort方法的自定义排序

java中的ArrayList需要通过collections类的sort方法来进行排序 如果想自定义排序方式则需要有类来实现Comparator接口并重写compare方法 调用sort方法时将ArrayList对象与实现Commparator接口的类的对象作为参数 示例: // 外部类的方式 import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.uti

javascript sort方法容易犯错的地方

sort方法用来对数组排序非常方便.但是sort(func)这个func参数的构造却很容易混淆. 这个func的作用是,把排序结果里任意相邻两项a,b放入到func里来执行,如果返回值都为-1,则为正序排列,如返回值都为1,则为逆序排列. 例如,[1,3,65,97,45,6,2] 如果要正序,就应该写成[1,3,65,97,45,6,2].sort(function(a, b){return a - b;}), 如果要逆序:[1,3,65,97,45,6,2].sort(function(a,

Array 的sort()方法详解

1.数组的sort()方法排序数字(按升序) 如果要排序数字49.5.9,那么sort()方法排序的结果是49.5.9.这是因为sort()方法默认情况下是进行升序排列.从左往右一位一位比较ASCII码大小,直至比较出大小   (若其中位数不足的补零) 那么我们应该如何利用sort()方法进行排序呢? 首先我们定义一个函数: /*升序*/ function sortNumbleUp(x,y){ return x-y; } /*降序*/ function sortNumbleDown(x,y){