文档章节

Objective C中数组排序的三种方法

H
 HillYoung
发布于 2014/01/03 10:16
字数 378
阅读 364
收藏 4

参考http://my.oschina.net/u/554222/blog/173958

文件.h

#import <Foundation/Foundation.h>

#import "AddressCard.h"


@interface AddressBook : NSMutableArray<NSCoding>

@property(retain) NSMutableArray *book;

-(void)seek:(AddressCard *)addressCard;

-(NSMutableArray *)sort;

-(void)display;

-(NSComparisonResult)compare:(AddressCard *)card1 card2:(AddressCard *)card2;

//-(NSComparisonResult)compare:(AddressCard *)card;

@end

文件.m

#import "AddressBook.h"


@implementation AddressBook

-(void)seek:(AddressCard *)addressCard

{

    for (NSString *seekName in self.book)

    {

        if ([addressCard.name isEqualToString:seekName])

        {

            NSLog(@"%@",addressCard);

            break;

        }

    }

    NSLog(@"Have no the person");

}

//简单排序

//-(NSMutableArray *)sort

//{

//    NSArray *sortedarray=[self.book sortedArrayUsingSelector:@selector(compare:)];

//    if ([self.book sortedArrayUsingSelector:@selector(compare:)]==nil)

//    {

//        NSLog(@"操作失败");

//    }

//    else

//    {

//        NSLog(@"操作成功");

//    }

////    sortedarray=[NSArray arrayWithObjects:@"abc",@"sfd", nil];

//    NSLog(@"%@",sortedarray);

//    NSLog(@"sortedarray:%p  book:%p",sortedarray,self.book);

////    [self.book removeAllObjects];

////    self.book=[[NSMutableArray alloc] init];

//    self.book=[NSMutableArray arrayWithArray:sortedarray];

//    return self;

//}

//block语法排序

//-(NSMutableArray *)sort

//{

//    NSArray *sortedarray=[self.book sortedArrayUsingComparator:^NSComparisonResult(AddressCard *card1, AddressCard *card2)

//    {

//        NSComparisonResult result=[card1.name compare:card2.name];

//        return result;

//    }];

//    self.book=[NSMutableArray arrayWithArray:sortedarray];

//    return self;

//}

//高级排序,,

-(NSMutableArray *)sort

{

    NSSortDescriptor *nameDesc=[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];

    NSSortDescriptor *emailDesc=[NSSortDescriptor sortDescriptorWithKey:@"email" ascending:YES];

    NSSortDescriptor *phoneDesc=[NSSortDescriptor sortDescriptorWithKey:@"phoneNumber" ascending:YES];

    

    NSArray *descArray=[NSArray arrayWithObjects:nameDesc,emailDesc,phoneDesc, nil];

    NSArray *sortedArray=[self.book sortedArrayUsingDescriptors:descArray];

    self.book=[NSMutableArray arrayWithArray:sortedArray];

    return self;

}

-(void)display

{

    for (AddressCard *str in self.book)

    {

        NSLog(@"%@",str);

    }

}

-(NSComparisonResult)compare:(AddressCard *)card1 card2:(AddressCard *)card2

{

    NSComparisonResult result=[card1.name compare:card2.name];

    return result;

}

//-(NSComparisonResult)compare:(AddressCard *)card

//{

//    if ([self.book indexOfObject:card]==0)

//    {

//        return NSOrderedSame;

//    }

//    else

//    {

//        NSComparisonResult result=[[[self.book objectAtIndex:([self.book indexOfObject:card]+1)] name] compare:card.name];

//        return result;

//    }

//}

-(void)encodeWithCoder:(NSCoder *)aCoder

{

    [aCoder encodeObject:self.book forKey:@"book"];

}

-(id)initWithCoder:(NSCoder *)aDecoder

{

    if (self=[super init])

    {

        self.book=[aDecoder decodeObjectForKey:@"book"];

    }

    return self;

}


@end

高级排序使用过程中注意对象的使用是否正确,应特别注意

NSSortDescriptor *nameDesc=[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];

中的Key,假如数组self.book中元素有自定义类,如:若name为自定类,类中有firstName,则Key应为@"name.firstName",具体如:

NSSortDescriptor *nameDesc=[NSSortDescriptor sortDescriptorWithKey:@"name.firstName" ascending:YES];

© 著作权归作者所有

共有 人打赏支持
H
粉丝 14
博文 96
码字总数 25777
作品 0
南京
程序员
私信 提问
Objective C中数组排序几种情况的总结

大体上,OC中常用的数组排序有以下几种方法:sortedArrayUsingSelector:;sortedArrayUsingComparator:;sortedArrayUsingDescriptors: 1、简单排序(sortedArrayUsingSelector:) 如果只是对字...

pengloo53
2013/11/03
0
2
Object-c 中的数据类型

导航: 基本类型 ID 对象类型常见的有 对象类型 -NSLog -NSNumber -NSString和NSMutableString -NSArray和NSMutableArray -NSSet和NSMutableSet -NSDictionary和NSMutableDictionary 基本类型......

gaoios
2014/01/05
0
0
Objective C中数组排序几种情况的总结

目录:[ - ] 1、简单排序(sortedArrayUsingSelector:) 2、利用block语法(sortedArrayUsingComparator:) 3、高级排序(sortedArrayUsingDescriptors:) 大体上,OC中常用的数组排序有以下...

mingxun
2013/11/04
0
0
Swift2.0语言教程之Swift2.0语言中的标准函数

Swift2.0语言教程之Swift2.0语言中的标准函数 Swift2.0中的标准函数 函数除了可以根据参数列表的有无分为无参函数和有参函数,还可以从定义角度分为用户自定义函数和标准函数两种。以上的示例...

大学霸
2015/07/17
0
0
Objective-C 语法之常用数据结构

本文主要介绍Objective-C语言中的一些常用数据结构 HelloWorldViewController.m类中,我们的测试语法代码添加在viewDidLoad方法中 1.整型 (int) 浮点型 (float, double) 短长整型(short, lon...

鉴客
2011/10/04
8.2K
1

没有更多内容

加载失败,请刷新页面

加载更多

EOS账户如何工作,我们如何获取eos账号?

EOS账户的工作方式是什么?帐户是存储在区块链中的人类可读名称。它可以由个人或一群人拥有,具体的取决于权限配置。需要一个帐户来将交易转移或推送到区块链。——EOSIO Wiki EOS账户如何工...

笔阁
10分钟前
0
0
iOS面试之@property

https://juejin.im/post/5c105c7ce51d4562d138086f @property介绍 相信做过iOS开发的同学都使用过@property,@property翻译过来是属性。在定义一个类时,常常会有多个@property,有了@proper...

壹峰
12分钟前
0
0
[springBoot系列]--springBoot注解大全

一、注解(annotations)列表 @SpringBootApplication:包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。其中@ComponentScan让spring Boot扫描到Configuration类并把它加......

Jack088
26分钟前
6
0
tomcat编译超过64k大小的jsp文件报错原因

  今天遇到一个问题,首先是在tomcat中间件上跑的web项目,一个jsp文件,因为代码行数实在是太多了,更新了几个版本之后编译报错了,页面打开都是报500的错误,500的报错,知道http协议返回...

SEOwhywhy
47分钟前
5
0
flutter http 请求客户端

1、pubspec文件管理Flutter应用程序的assets(资源,如图片、package等)。 在pubspec.yaml中,通过网址“https://pub.dartlang.org/packages/http#-installing-tab-”确认版本号后,将http(0...

渣渣曦
47分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部