亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

Objective-C中NSArray的基本用法示例

2020-07-26 03:33:57
字體:
來源:轉載
供稿:網友

NSArray的排序

復制代碼 代碼如下:

+ (id)studentWithFirstName:(NSString *)firstName lastName:(NSString *)lastName{ 
     
    Student *stu = [[Student alloc] init]; 
     
    stu.firstName = firstName; 
    stu.lastName = lastName; 
     
    return stu; 

 
+ (id)studentWithFirstName:(NSString *)firstName lastName:(NSString *)lastName bookName:(NSString *)bookName{ 
 
    Student *stu = [Student studentWithFirstName:firstName lastName:lastName]; 
     
    stu.book = [Book bookWithName:bookName]; 
     
    return stu; 
 

 
- (NSComparisonResult)compareStudent:(Student *)stu{ 
     
    NSComparisonResult result = [self.firstName compare:stu.firstName]; 
     
    if (result == NSOrderedSame) { 
        result = [self.lastName compare:stu.lastName]; 
    } 
     
    return result; 
     

 
- (NSString *)description{  
  
    //return [NSString stringWithFormat:@" %@ %@ %@",self.firstName,self.lastName,self.book.name]; 
    return [NSString stringWithFormat:@" %@ %@ %@",self.firstName,self.lastName,_book.name]; 

 
 
#pragma mark 3.NSArray排序1 
void arraySort1(){ 
     
    NSArray *array = [NSArray arrayWithObjects:@"2",@"3",@"1",@"4", nil nil]; 
     
    // 指定系統自帶規定的比較方法compare: 
    NSArray *array2 = [array sortedArrayUsingSelector:@selector(compare:)]; 
    NSLog(@"%@",array2); 
     

 
#pragma mark 3.NSArray排序2 
void arraySort2(){  
      
    Student *stu1 = [Student studentWithFirstName:@"hu" lastName:@"mingtao"]; 
    Student *stu2 = [Student studentWithFirstName:@"zhu" lastName:@"wenpeng"]; 
    Student *stu3 = [Student studentWithFirstName:@"zhao" lastName:@"weisong"]; 
    Student *stu4 = [Student studentWithFirstName:@"hu" lastName:@"junpeng"]; 
     
    NSArray *array = [NSArray arrayWithObjects:stu1,stu2,stu3,stu4, nil nil]; 
     
    // 類似JAVA中得compareTo,自己定義比較方式,但是一定要實現compare方法 
    NSArray *array2 = [array sortedArrayUsingSelector:@selector(compareStudent:)]; 
     
    NSLog(@"%@",array2); 
 

 
#pragma mark 3.NSArray排序3-Block排序 
void arraySort3(){ 
     
    Student *stu1 = [Student studentWithFirstName:@"hu" lastName:@"mingtao"]; 
    Student *stu2 = [Student studentWithFirstName:@"zhu" lastName:@"wenpeng"]; 
    Student *stu3 = [Student studentWithFirstName:@"zhao" lastName:@"weisong"]; 
    Student *stu4 = [Student studentWithFirstName:@"hu" lastName:@"junpeng"]; 
     
    NSArray *array = [NSArray arrayWithObjects:stu1,stu2,stu3,stu4, nil nil]; 
     
    NSArray *array2 = [array sortedArrayUsingComparator:^NSComparisonResult(Student *obj1, Student *obj2) { 
        NSComparisonResult result = [obj1.firstName compare:obj2.firstName]; 
         
        if (result == NSOrderedSame) { 
            result = [obj1.lastName compare:obj2.lastName]; 
        }  
          
        return result; 
    }]; 
     
    NSLog(@"%@",array2); 
 
     
}  
 
#pragma mark 4.NSArray排序4-高級排序 
void arraySort4(){ 
     
    Student *stu1 = [Student studentWithFirstName:@"hu" lastName:@"mingtao" bookName:@"lianai"]; 
    Student *stu2 = [Student studentWithFirstName:@"zhu" lastName:@"wenpeng" bookName:@"tianshi"]; 
    Student *stu3 = [Student studentWithFirstName:@"zhao" lastName:@"weisong" bookName:@"love"]; 
    Student *stu4 = [Student studentWithFirstName:@"hu" lastName:@"junpeng" bookName:@"qingren"]; 
     
    NSArray *array = [NSArray arrayWithObjects:stu1,stu2,stu3,stu4, nil nil]; 
     
    // 1.先按照書名進行排序 
    NSSortDescriptor *bookNameDesc = [NSSortDescriptor sortDescriptorWithKey:@"book.name" ascending:YES]; 
    // 2.先按照姓進行排序 
    NSSortDescriptor *firstNameDesc = [NSSortDescriptor sortDescriptorWithKey:@"firstName" ascending:YES]; 
    // 3.先按照名進行排序 
    NSSortDescriptor *lastNameDesc = [NSSortDescriptor sortDescriptorWithKey:@"lastName" ascending:YES]; 
 
    NSArray *array2 = [array sortedArrayUsingDescriptors:[NSArray arrayWithObjects:bookNameDesc,firstNameDesc,lastNameDesc, nil nil]]; 
     
    NSLog(@"%@",array2);  
      
     
}


NSArray的一些用法
NSArray  只允許裝OC對象,并且不能裝空值,空代表數組元素的結束

復制代碼 代碼如下:

#pragma mark - NSArray的基本用法
   // 創建一個空數組
      NSArray *array = [NSArray array];
   // 創建有一個元素的數組
      array = [NSArray arrayWithObject:@"123"];
    // 創建有多個元素的數組
      array = [NSArray arrayWIthObjects:@"a",@"b",nil ];//不能裝nil空指針,空值代表數組元素結束
    // 將一個數組賦值給一個數組
    + (instancetype)arrayWithArray:(NSArray *)array;
    // 獲取元素的個數
       int count = [array count]; //和 count = array.count; 相同,都是調用get方法
    // 是否包含一個元素
      - (bool)containsObject:(id)anObject;
    // 返回最后一個元素
       - (id) lastObject;
     // 獲取index位置的元素
        - (id)objectAtIndex:(NSUInteger) index;
     // 獲取元素的位置
        - (NSUInteger) indexOfObject:(id)anObject;
     // 在range范圍內查找元素的位置
        - (NSUInteger) indexofObject:(id)anObject inRange:(NSRange)range;
     // 比較兩個集合內容是否相同
        - (Bool) isEqualToArray:(NSArray *)otherArray;
     // 返回兩個集合中第一個相同的對象元素
        - (id) firstObjectCommonWithArray:(NSArray *)otherArray;

#pragma mark - NSArray的高級用法
        //讓集合里面的所有元素都執行aSelector這個方法
           - (void)makeObjectsPerformSelector:(SEL)aSelector;
        //讓集合里面的所有元素都執行aSelector這個方法,給這個方法添加參數,但是只支持一個參數
           - (void)makeObjectsPerformSelector:(SEL)aSelector withObject:(id)argument
        //添加一個元素,返回一個新的NSArray(方法調用者本身沒有發生變化)
           - (NSArray *)arrayByAddingObject:(id)anObject
       //添加otherArray的所有元素,返回一個新的NSArray(方法著本身沒有改變)
           - (NSArray *) arrayByAddingObjectsFromArray:(NSArray *) otherArray;
       //截取range范圍的數組
           - (NSArray *) subarrayWithRange:(NSRenge)range;
      //用separator做拼接符,拼接成一個字符串
           - (NSString *) componentsJoinedByString:(NSString *)separator
      //將NSArray持久化到文件中去
           - (Bool) writeToFile:(NSString *)path atomically:(Bool)useAuxiliaryFile

#pragma mark - NSArray的遍歷
     // 方法一:普通遍歷(利用for循環)
       void arrayFor1(){
        NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",nil];
        int count = array.count;
        for(int i=0; i<count; i++){
              id obj = [array objectAtIndex:i];
             NSLog(@"%i-%@",i, obj);
        }
       }

     // 方法二:快速遍歷
       void arrayFor2(){
           NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",nil];
           int count = array.count;
           int i=0;
           for(id obj in array){
                NSLog(@"%i-%@",i, obj);
                i++;
           }
         }

     // 方法三:利用block遍歷
          void arrayFor3(){
               NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",nil];
               [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
                       NSLog(@"%zi->%@",idx, obj);
                        //  *stop = YES; //改變外邊的Bool,終止遍歷
                  }];
             }

    // 方法四:利用迭代器
 先介紹一下-->NSEnumerator迭代器:集合的迭代器,可以用于遍歷集合元素,NSArray 有相應的方法來獲取迭代器
                  //獲取一個正序遍歷的迭代器
                     - (NSEnumerator *) objectEnumerator;
                 //獲取一個反序遍歷的迭代器
                     - (NSEnumerator *) reverseObjectEnumerator;
                @常用方法:
                 //獲取下一個元素
                    - (id) nextObject;
                 //獲取所有的元素
                    - (NSArray *) allObjects
          void arrayFor4(){
                   NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",nil];
                   NSEnumerator *enumerator = [array objectEnumerator];// 返回數組的迭代器
                   //如果放到遍歷之后,則取到空,原因是,遍歷完了,就沒值了
                   NSArray *array2 = [enumerator allObjects];
                   NSLog(@"array2=%@", array2);
   
                 //獲取下一個需要遍歷的元素
                   id obj = nil;
                   while (obj = [enumerator nextObject]) {
                         NSLog(@"obj=%@", obj);
                   }
                  }


使用block 塊遍歷整個數組。這個block 需要三個參數,id obj 表示數組中的元素。 
NSUInteger idx 標示元素的下標, 
boolbool *stop 是一個bool類型的參數。 官方描述如下: 
A reference to a Boolean value. The block can set the value to YES to stop further processing of the array.  
The stop argument is an out-only argument. You should only ever set this Boolean to YES within the Block. 
- (void)enumerateObjectsUsingBlock:(void (^)(id obj, NSUInteger idx,BOOLBOOL *stop))block  
調用例子如: 
 

復制代碼 代碼如下:
 
NSArray *array = [NSArray arrayWithObjects:@"wendy",@"andy",@"tom",@"test", nil nil];  
  
  
   [array enumerateObjectsUsingBlock:^(id str,NSUInteger index, BOOL* te){ 
       NSLog(@"%@,%d",str,index); 
   }]; 

同上面的方法一項,區別在于,這里多添加了一個參數,用來標示 是從前向后遍歷,還是從后往前遍歷。 
- (void)enumerateObjectsWithOptions:(NSEnumerationOptions)opts usingBlock:(void (^)(id obj, NSUInteger idx,BOOLBOOL *stop))block 
調用例子如下: 
復制代碼 代碼如下:

NSArray *array = [NSArray arrayWithObjects:@"wendy",@"andy",@"tom",@"test", nil nil]; 
 
 
    [array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id str,NSUInteger index, BOOL* te){ 
        NSLog(@"%@,%d",str,index);  
    }]; 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美肥臀大乳一区二区免费视频| 这里只有精品在线播放| 在线看欧美日韩| 成人日韩在线电影| 91产国在线观看动作片喷水| 国内精品400部情侣激情| 欧美午夜www高清视频| 久久久久久久久网站| 国产精品视频yy9099| 国产在线999| 91视频-88av| 日韩网站免费观看高清| 91亚洲精品久久久| 国产精品午夜一区二区欲梦| xxav国产精品美女主播| 久久影院在线观看| 亚洲欧美日韩区| 日韩av免费在线看| 国产精品视频白浆免费视频| 日韩麻豆第一页| 欧美黑人又粗大| 国产精品成人国产乱一区| 亚洲精品日韩激情在线电影| 日韩视频一区在线| 成人国产精品久久久| 国产精品网站视频| 69视频在线播放| 久久精品成人欧美大片古装| 日韩最新在线视频| 亚洲在线免费视频| 亚洲电影免费观看高清完整版在线观看| 日本精品性网站在线观看| 久久精品国产2020观看福利| 国产网站欧美日韩免费精品在线观看| 九九热99久久久国产盗摄| 亚洲精品一区中文字幕乱码| 日韩电影中文字幕在线| 精品露脸国产偷人在视频| 欧美日韩美女在线| 日本成人激情视频| 最近2019中文字幕mv免费看| 国产97在线亚洲| 中文字幕一精品亚洲无线一区| 亚洲的天堂在线中文字幕| 亚洲成人久久电影| 日韩美女视频中文字幕| 亚洲人成电影在线观看天堂色| 欧美激情在线狂野欧美精品| 亚洲视频一区二区| 国产精品自拍小视频| 久久这里有精品视频| 亚洲高清久久久久久| 国内久久久精品| 国产精品美女在线观看| 96国产粉嫩美女| 国产精品a久久久久久| 亚洲va久久久噜噜噜| 欧美性生交大片免网| 国语自产精品视频在线看抢先版图片| 国产精品观看在线亚洲人成网| 国产视频亚洲视频| 亚洲理论在线a中文字幕| 国产精品久久999| 日韩视频在线观看免费| 亚洲自拍小视频免费观看| 91久久精品久久国产性色也91| 亚洲黄色av网站| 国产亚洲日本欧美韩国| 国产精品三级久久久久久电影| 深夜福利亚洲导航| 色老头一区二区三区在线观看| 国外成人性视频| 国产精品免费久久久久久| 日韩精品在线第一页| 91av视频在线播放| 91免费在线视频| 欧美成人精品在线视频| 一区二区三区四区精品| 91精品久久久久久| 97超级碰碰碰久久久| 91精品国产91久久久久久久久| 欧美激情小视频| 欧美裸体xxxxx| 深夜福利日韩在线看| 成人在线播放av| 色综合导航网站| 成人精品在线观看| 欧美视频在线观看免费| 亚洲福利小视频| 91欧美视频网站| 亚洲aⅴ日韩av电影在线观看| 欧美华人在线视频| 岛国av在线不卡| 97高清免费视频| 久久精品视频中文字幕| 日韩成人激情影院| 日韩中文在线中文网在线观看| 欧美裸身视频免费观看| 欧美高清视频在线播放| 一区二区三区国产视频| 在线成人一区二区| 欧美巨大黑人极品精男| 欧美性猛交xxxx黑人| 欧美日韩国产精品| 欧美电影在线观看高清| 日韩av不卡在线| 国产精品电影观看| 欧洲美女7788成人免费视频| 国产69精品久久久久9999| 欧美性猛xxx| 欧美高清自拍一区| 国产精品美乳在线观看| 亚洲国产精品嫩草影院久久| 正在播放欧美视频| 91精品久久久久久久| 亚洲一区二区三区四区视频| 成人伊人精品色xxxx视频| 亚洲欧美日韩久久久久久| 国产精品丝袜久久久久久不卡| 成人免费视频97| 欧美壮男野外gaytube| 91国偷自产一区二区三区的观看方式| 欧美在线日韩在线| 国产精品影片在线观看| 欧美疯狂xxxx大交乱88av| 亚洲午夜色婷婷在线| 日本伊人精品一区二区三区介绍| 色噜噜久久综合伊人一本| 26uuu国产精品视频| 久久久久久久久久久av| 欧美成人激情视频| 中文字幕亚洲欧美日韩高清| 亚洲人成电影在线观看天堂色| 国产欧美在线看| 欧美黄色片视频| 亚洲精品91美女久久久久久久| 国产精品爽黄69| 成人午夜两性视频| 欧美性生交大片免费| 国产精品久久久久免费a∨大胸| 国产在线观看精品一区二区三区| 日韩av片电影专区| 亚洲精品国产免费| 亚洲视频自拍偷拍| 久久久av亚洲男天堂| 欧美最猛性xxxxx免费| 亚洲人成电影网| 久久99久久99精品中文字幕| 亚洲国产精彩中文乱码av| 国产欧美日韩中文| 亚洲女人天堂网| 亚洲精品白浆高清久久久久久| 97久久超碰福利国产精品…| 亲子乱一区二区三区电影| 欧美日韩亚洲91| 丝袜美腿精品国产二区| 国产精品久久久久久久app| 91精品在线国产| 91po在线观看91精品国产性色| 搡老女人一区二区三区视频tv| 亚洲精品在线91| 欧美成人精品在线播放| 欧美国产亚洲视频| 亚洲美女在线看|