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


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類型的參數
  • NSEnumerationReverse 標示 是從前向后遍歷,還是從后往前遍歷

例一:

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

例二:

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

參考網站:

http://www.jb51.net/article/72539.htm


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM