1.NSArray基本概念
什么是NSArray
NSArray是OC中的數組類,開發中建議盡量使用NSArray替代C語言中的數組
NSArray有哪些使用注意
- 只能存放任意OC對象, 並且是有順序的
- 不能存儲非OC對象, 比如int\float\double\char\enum\struct等
- 它是不可變的,一旦初始化完畢后,它里面的內容就永遠是固定的, 不能刪除里面的元素, 也不能再往里面添加元素
- NSArray使用NSLog()打印,輸出的是小括號的格式。
- NSArray中不能存儲nil,因為NSArray認為nil是數組的結束(nil是數組元素結束的標記)。nil就是0。0也是基本數據類型,不能存放到NSArray中。
NSArray的常用方法
- (NSUInteger)count;
獲取集合元素個數
- (id)objectAtIndex:(NSUInteger)index;
獲得index位置的元素
- (BOOL)containsObject:(id)anObject;
是否包含某一個元素
- (id)lastObject;
返回最后一個元素
- (id)firstObject;
返回最后一個元素
- (NSUInteger)indexOfObject:(id)anObject;
查找anObject元素在數組中的位置(如果找不到,返回-1)
- (NSUInteger)indexOfObject:(id)anObject inRange:(NSRange)range;
在range范圍內查找anObject元素在數組中的位置
書寫NSArray簡寫形式
NSArray *arr = [NSArray arrayWithObjects:@"lnj", @"lmj", @"jjj", nil]; NSArray *arr = @[@"lnj", @"lmj", @"jjj"]; // 獲取數組元素的簡寫 NSLog(@"%@", [arr objectAtIndex:0]); NSLog(@"%@", arr[0]);
2.NSArray遍歷
增強for 循環的使用
如何使用增強for循環,遍歷NSArray數組
//逐個取出arr中的元素, 將取出的元素賦值給obj // 注意: obj的類型可以根據數組中元素的類型來寫, 不一定要寫NSObject for (NSString *obj in arr) { NSLog(@"obj = %@", obj); }
如何使用OC數組的迭代器來遍歷數組
// 每取出一個元素就會調用一次block // 每次調用block都會將當前取出的元素和元素對應的索引傳遞給我們 // obj就是當前取出的元素, idx就是當前元素對應的索引 // stop用於控制什么時候停止遍歷 [arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { if (idx == 1) { *stop = YES; } NSLog(@"obj = %@, idx = %lu", obj, idx); }];
3.數組排序
如何對數據進行排序
NSArray *arr = @[@10, @20, @5, @7, @15]; NSLog(@"排序前: %@", arr); // 注意: 想使用compare方法對數組中的元素進行排序, 那么數組中的元素必須是Foundation框架中的對象, 也就是說不能是自定義對象 elector:@selectoNSArray *newArr = [arr sortedArrayUsingSr(compare:)]; NSLog(@"排序后: %@", newArr);
如何對對象進行排序
Person *p1 = [Person new]; p1.age = 10; Person *p2 = [Person new]; p2.age = 20; Person *p3 = [Person new]; p3.age = 5; Person *p4 = [Person new]; p4.age = 7; NSArray *arr = @[p1, p2, p3, p4]; NSLog(@"排序前: %@", arr); // 按照人的年齡進行排序 // 該方法默認會按照升序排序 NSArray *newArr = [arr sortedArrayWithOptions:NSSortStable usingComparator:^NSComparisonResult(Person *obj1, Person *obj2) { // 每次調用該block都會取出數組中的兩個元素給我們 // 二分 // NSLog(@"obj1 = %@, obj2 = %@", obj1, obj2); return obj1.age > obj2.age; //降序 // return obj1.age < obj2.age; //升序 /* 改方法,產生隨機數用 if (obj1.age > obj2.age) { // 5 4 return NSOrderedDescending; }else if(obj1.age < obj2.age) { // 4 5 return NSOrderedAscending; }else { return NSOrderedSame; } */ }]; NSLog(@"排序后: %@", newArr);
4.NSArray和NSString轉換
NSArray *arr = @[@"lnj", @"lmj", @"jjj"];
如何將數組中每個元素拼接成字符串
方法一:
// 1.定義一個可變字符串保存拼接之后的結果 NSMutableString *strM = [NSMutableString string]; // 2.遍歷數組, 取出數組中的每一個元素, 將元素添加到可變字符串中 for (NSString *str in arr) { [strM appendString:str]; // 3.每次添加完畢之后再添加一個- [strM appendString:@"-"]; } [strM deleteCharactersInRange:NSMakeRange(strM.length - 1, 1)]; NSLog(@"strM = %@", strM);
方法二:
//把數組元素鏈接成字符串,用**作拼接符將數組元素拼接成一個字符串 NSString *str = [arr componentsJoinedByString:@"**"]; NSLog(@"str = %@", str);
如何通過一個字符串生成一個數組
字符串分割方法
NSString *str = @"lnj**lmj**jjj"; NSArray *arr = [str componentsSeparatedByString:@"**"]; NSLog(@"arr = %@", arr);
5.NSArray文件讀寫
如何將數組寫入文件中
NSArray *arr = @[@"lnj", @"lmj", @"jjj"]; BOOL flag = [arr writeToFile:@"/Users/xiaomage/Desktop/abc.plist" atomically:YES]; NSLog(@"flag = %i", flag);
將數組寫入文件中,有什么注意點
- 注意1:如果將一個數組寫入到文件中之后, 本質是寫入了一個XML文件 在iOS開發中一般情況下我們會將XML文件的擴展名保存為plist
- 注意2:writeToFile只能寫入數組中保存的元素都是Foundation框架中的類創建的對象, 如果保存的是自定義對象那么不能寫入
如何從文件中讀取數據到NSArray中
- 從文件中讀取一個數組,此方法在字典轉模型中,經常用到
NSArray *newArray = [NSArray arrayWithContentsOfFile:@"/Users/xiaomage/Desktop/abc.plist"]; NSLog(@"%@", newArray);
6.NSMutableArray
可變數組 增刪改查
什么是可變數組?和NSArray有什么區別
- NSMutableArray是NSArray的子類
- NSArray是不可變的,一旦初始化完畢后,它里面的內容就永遠是固定的, 不能刪除里面的元素, 也不能再往里面添加元素
- NSMutableArray是可變的,隨時可以往里面添加\更改\刪除元素
如何創建一個空的數組?創建可變數組有什么注意點?
1.創建空數組
NSMutableArray *arrM = [NSMutableArray array];
NSMutableArray *arrM = [[NSMutableArray alloc] init];
2.注意點:
- 不能通過@[]來創建一個可變數組, 因為@[]創建出來的是一個不可變的數組
- 如果把一個不可變數組當做一個可變數組來使用, 會引發一個運行時的錯誤
例如:
NSMutableArray *arrM = @[@"lnj", @"lmj"]; [arrM addObject:@"JJJ"];
如何給可變數組增加內容 方法一:
[arrM addObject:@"lnj"];
方法二:
// 將指定數組中的元素都取出來, 放到arrM中 \ 並不是將整個數組作為一個元素添加到arrM中 [arrM addObjectsFromArray:@[@"lmj", @"jjj"]]; // 注意: 以下是將整個數組作為一個元素添加 // [arrM addObject:@[@"lmj", @"jjj"]]; NSLog(@"%@", arrM);
如何給可變數組插入內容
[arrM insertObject:@"xcq" atIndex:1]; NSRange range = NSMakeRange(2, 2); NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:range]; // 插入一組數據, 指定數組需要插入的位置, 和插入多少個 [arrM insertObjects:@[@"A", @"B"] atIndexes:set];
如何刪除可變數組中的內容
刪除指定元素:
[arrM removeObjectAtIndex:0];
刪除數組中最后一個元素
[arrM removeLastObject];
刪除index位置的元素
[arrM removeObject:@"A"];
如何替換可變數組中的內容
[arrM replaceObjectAtIndex:1 withObject:@"M"]; //簡寫: arrM[0] = @"ZS"; NSLog(@"%@", arrM);
如何獲取可變數組中的內容
NSLog(@"%@", [arrM objectAtIndex:0]);
