Sort方法的擴充

來源:互聯網
上載者:User

標籤:sort   nsmutablearray   nsarray   

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"

)


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.