文档章节

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

H
 HillYoung
发布于 2014/01/03 10:16
字数 378
阅读 363
收藏 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
粉丝 13
博文 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语法之常用数据结构 由于工作重心发生了改变,Android开发暂时不会继续投入经历。MOMO最近在自学IOS游戏开发 哇咔咔~~目前还在学习阶段此篇文章主要用于备忘,欢迎各位大牛们给...

彭博
2012/03/09
143
0

没有更多内容

加载失败,请刷新页面

加载更多

emoji

前言:随着iOS系统版本的升级,对原生emoji表情的支持也越来越丰富。emoji表情是unicode码中为表情符号设计的一组编码,当然,还有独立于unicode的另一套编码SBUnicode,在OS系统中,这两种编...

HeroHY
33分钟前
2
0
rabbitmq学习(二)

生产者消费者初级案列 ChannelUtils package com.hensemlee.rabbitmq;import com.rabbitmq.client.Channel;import com.rabbitmq.client.Connection;import com.rabbitmq.client.Connecti......

hensemlee
43分钟前
1
0
MarkDown入门简介

Markdown是一种可以使用普通文本编辑器编写的标记语言,通过类似HTML的标记语法,它可以使普通文本内容具有一定的格式。Markdown的语法简洁明了、学习容易,而且功能比纯文本更强,因此有很多...

一零贰IV
46分钟前
1
0
druid配置db2参考记录

Driver Name:COM.ibm.db2.jdbc.app.DB2 Driver Type 4 Driver URL Pattern:jdbc:db2://ServerIP:50000/databasename ${driverClassName} 这个参数没有在spring相关的properties文件中配置 ......

tonyfox
50分钟前
1
0
用户体验要素——以用户为设计中心

一、用户体验是什么 产品会与外界发生联系,人们如何去使用产品,人们使用产品无非解决两种问题,一,提高效率;二娱乐。而用户体验兼顾着功能和界面两个方面,为的是“提高人们的工作效率”...

铸剑为犁413
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部