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); }];
參考網站: