成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

iOS探索:對NSArray中自定義的對象進(jìn)行排序

移動(dòng)開發(fā) iOS
我們開發(fā)的每個(gè)程序都會(huì)使用到一些數(shù)據(jù),而這些數(shù)據(jù)一般被封裝在一個(gè)自定義的類中。例如一個(gè)音樂程序可能會(huì)有一個(gè)Song類,聊天程序則又一個(gè) Friend類,點(diǎn)菜程序會(huì)有一個(gè)Recipe類等。有時(shí)候我們希望在程序中顯示的列表數(shù)據(jù)是按照一定順序進(jìn)行排列的,本文我們就來看看在iOS中有哪些 方法可以對NSArray中的對象進(jìn)行排序。

本文譯自How to sort NSArray with custom objects

[[110950]]

我們開發(fā)的每個(gè)程序都會(huì)使用到一些數(shù)據(jù),而這些數(shù)據(jù)一般被封裝在一個(gè)自定義的類中。例如一個(gè)音樂程序可能會(huì)有一個(gè)Song類,聊天程序則又一個(gè) Friend類,點(diǎn)菜程序會(huì)有一個(gè)Recipe類等。有時(shí)候我們希望在程序中顯示的列表數(shù)據(jù)是按照一定順序進(jìn)行排列的,本文我們就來看看在iOS中有哪些 方法可以對NSArray中的對象進(jìn)行排序。下面是目錄:

  • 小引
  • 使用NSComparator進(jìn)行排序
  • 使用NSDescriptor進(jìn)行排序
  • 使用selector進(jìn)行排序

小引

我們將要排序的對象是一個(gè)Persion類,如下定義:

  1. @interface Person : NSObject 
  2. @property (nonatomic, copy) NSString *name; 
  3. @property (nonatomic, copy) NSString *surname; 
  4. @property (nonatomic, strong) NSDate *dateOfBirth; 
  5. @end 

而數(shù)組中包含如下內(nèi)容:

  1. Smith John 03/01/1984 
  2. Andersen Jane 16/03/1979 
  3. Clark Anne 13/09/1995 
  4. Smith David 19/07/1981 
  5. Johnson Rose 22/02/1989 

使用NSComparator進(jìn)行排序

comparator實(shí)際上是用一個(gè)block對象作比較操作。它的定義如下所示:

  1. typedef NSComparisonResult (^NSComparator)(id obj1, id obj2); 

上面的參數(shù)(obj1、obj2)就是我們將要做比較的對象。block返回的結(jié)果為NSComparisonResult類型來表示兩個(gè)對象的順序。

要對整個(gè)數(shù)組做排序,則需要使用NSArray的sortArrayUsingComparator:方法,如下代碼所示:

  1. NSArray *sortedArray = [self.persons sortedArrayUsingComparator:^NSComparisonResult(Person *p1, Person *p2){ 
  2.     return [p1.surname compare:p2.surname]; 
  3. }]; 

最終排序的結(jié)果如下所示:

  1. Andersen Jane 
  2. Clark Anne 
  3. Johnson Rose 
  4. Smith John 
  5. Smith David 

使用NSDescriptor進(jìn)行排序

Sort descriptor不僅可以用來對數(shù)組進(jìn)行排序,還能指定element在table view中的排序,以及Core Data中對fetch request返回的數(shù)據(jù)做排序處理。通過sort descriptor可以很方便的對數(shù)組進(jìn)行多個(gè)key的排序。下面來看看如何對我們的數(shù)組做surname排序,然后在進(jìn)行name排序:

  1. NSSortDescriptor *firstDescriptor = [[NSSortDescriptor alloc] initWithKey:@"surname" ascending:YES]; 
  2. NSSortDescriptor *secondDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES]; 
  3.  
  4. NSArray *sortDescriptors = [NSArray arrayWithObjects:firstDescriptor, secondDescriptor, nil]; 
  5.  
  6. NSArray *sortedArray = [self.persons sortedArrayUsingDescriptors:sortDescriptors]; 

上面代碼的排序結(jié)果如下所示:

  1. Andersen Jane 
  2. Clark Anne 
  3. Johnson Rose 
  4. Smith David 
  5. Smith John 

使用selector進(jìn)行排序

當(dāng)面,我們也可以定義自己的方法進(jìn)行兩個(gè)對象做比較,并將該方法用于數(shù)組排序。comparator消息會(huì)被發(fā)送到數(shù)值中的每個(gè)對象中,并攜帶數(shù)組中另外的一個(gè)對象當(dāng)做參數(shù)。自定義的的方法的返回結(jié)果是這樣的:如果本身對象小于參數(shù)中的對象,就返回NSOrederedAscending,相反,則返回NSOrderedDescending,如果相等,那么返回NSOrderedSame。如下代碼所示:

  1. - (NSComparisonResult)compare:(Person *)otherPerson { 
  2.     return [self.dateOfBirth compare:otherPerson.dateOfBirth]; 

這個(gè)方法定義在Person類中,用來對person的生日進(jìn)行排序。

上面所介紹的這些方法都是為了完成相同的事情:對數(shù)組做排序處理,你可能在想改選擇使用哪個(gè)呢?當(dāng)需要通過多個(gè)key進(jìn)行排序,那么最簡單的方法就 是使用sort descriptor。如果比較方法很復(fù)雜的話,建議在使用外面自己的selector。Block是再iOS 4之后引入的一個(gè)強(qiáng)大功能,用block作比較,可以不必使用任何的變量就能完成一個(gè)簡單的比較方法,當(dāng)然,你也可以定義一個(gè)復(fù)雜的block,來替換 selector。

***,其實(shí)這里并沒有標(biāo)準(zhǔn)答案,你可以跟著自己的感覺走:]

責(zé)任編輯:閆佳明 來源: beyondvincent
相關(guān)推薦

2019-11-19 08:04:16

JavaHashSet去重

2010-03-01 11:10:41

WCF綁定元素

2013-06-27 11:10:01

iOS開發(fā)自定義UISlider

2022-10-09 08:35:06

SQL自定義排序

2022-09-20 07:01:50

對象初始化代碼

2024-01-05 15:28:06

鴻蒙數(shù)據(jù)同步GlobalThis

2022-06-06 09:01:16

SwiftUI自定義導(dǎo)航

2013-07-18 16:09:10

自定義iOS狀態(tài)欄iOS開發(fā)iOS學(xué)習(xí)

2021-11-23 15:06:42

Kubernetes 運(yùn)維開源

2010-05-11 13:16:21

Unix awk

2013-05-30 15:53:17

iOS開發(fā)iOS SDKPopver

2011-08-02 11:17:13

iOS開發(fā) View

2021-01-20 08:58:39

iOS 14桌面圖標(biāo)快捷指令

2012-06-01 11:02:33

2017-10-25 14:07:54

APPiOSxcode

2009-08-03 16:37:49

C#異常類

2011-06-15 09:24:36

Qt Widget Model

2009-11-12 16:14:28

ADO.NET自定義對

2009-11-25 14:36:39

PHP函數(shù)usort(

2015-06-10 10:54:24

自定義路PHP
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产在线视频在线观看 | 中文字幕精品一区二区三区精品 | 国产精品一区二区三区在线 | 国产高清精品网站 | 黄色在线播放视频 | 99中文字幕| 99久久婷婷国产综合精品电影 | 久久久毛片 | 天天插天天狠天天透 | 日韩精品久久久 | 精品伊人久久 | 成人av一区二区三区 | 精品视频一区二区三区在线观看 | 国产乱码精品一区二区三区五月婷 | 犬夜叉在线观看 | 久久国产视频网站 | 中文久久| 成人在线免费观看 | 成人性视频免费网站 | 亚洲免费视频在线观看 | 日韩免费福利视频 | 黄网站涩免费蜜桃网站 | 亚洲精品在线视频 | 日韩中文字幕免费在线 | 国产男女视频网站 | 亚洲精品一二三区 | 久久国产精品亚洲 | 亚洲精品视频播放 | 久久精彩视频 | 奇米视频777 | 欧美xxxx色视频在线观看免费 | 一级欧美| 人人九九精 | 国产精品久久久久久久久久免费看 | 久久精品国产亚洲a | 国产亚洲成av人在线观看导航 | 亚洲男女视频在线观看 | 亚洲成人中文字幕 | 日韩在线成人 | 欧美日韩视频在线第一区 | 在线成人免费视频 |