知識點
1.NSArray 類的重點函數使用
2.NSMutableArray 類的重點函數使用 3.字符串的分割和拼接
============================
NSArray, NSMutableArray
1.【需要理解的知識】
1.1 C語言中數組
1、 相同數據類型的集合;
int a[10];
float b[20];
char c[30];
2、 數組地址是連續;
1、OC數組和c數組的區別
1、NSArray是個類 數組是對象; 存儲也是對象;
2、數組不能直接存儲基本數據類型: char, int, shot, long…..
3、 數組分為兩種: 可變數組, 不可變數組; NSArray不可變數組類, NSMutableArray是可變數組類;
區別:
C數組里面存儲基本數據類型;
OC數組里面存儲的是對象;
2.【需要記住的知識】
不可變數組的類名: NSArray
2、如何創建一個數組
2.1、
通過對象來創建:
NSArray *arr1 = [[NSArray alloc] initWithObjects:@"string1", @"string2", @"string3", nil];
通過一個數組了創建
NSArray *arr2 = [[NSArray alloc] initWithArray:arr1];
//通過類的方法創建
通過對象來創建:
NSArray *arr3 = [NSArray arrayWithObjects:@"字符串1", @"字符串2", @"字符串3", nil];
通過一個數組了創建
NSArray *arr4 = [NSArray arrayWithArray:arr2];
2.2、Objective-c 2.0 新特征
從Xcode4.6以后,允許用類似c數組方式創建數組,僅適用於不可變數組
@[對象1, 對象2, 對象3.....];
NSArray *arr5 = @[@"string1", @"string2", @"string3"];
2.4、創建一個空對象
NSNull *nilObject = [NSNull null];
==========================================================
3.數組的元素是什么
1)數組元素可以是任意對象
練習:1.用三種方式創建一個包含3個字符串對象的數組
===========================
NSArray常用方法
1、獲取數組元素個數
NSUInteger count = [array count];
2、通過索引號獲取相應的元素(2種) (重要) NSString *s = [array objectAtIndex:0];
NSString *s1 = array[1];
3、取出最后一個元素
NSLog(@"%@",[array lastObject]);
4、通過對象獲取在數組中的下標
NSLog(@"%li",[array indexOfObject:@"string1"]);
5、判斷數組中數組包含元素anObject
BOOL ret = [array containsObject:@"string4"];
===================================
5、如何取出數組中的一部分元素 sub****
1)subarrayWithRange消息
作用:取出數組中指定范圍內range的元素
//6-1、 根據范圍獲取子數組(一部分數組元素);
NSRange range = NSMakeRange(1, 3);
NSArray *subArray = [array subarrayWithRange:range];
NSLog(@"%@", subArray);
2)objectsAtIndexes消息
作用:從數組中獲取指定下標的元素
//6-2、根據下標來獲取子數組:
// 整數集合對象;
NSMutableIndexSet *indexSet = [[NSMutableIndexSet alloc] init];
[indexSet addIndex:0];
[indexSet addIndex:2];
[indexSet addIndex:4];
NSArray *subArray2 = [array objectsAtIndexes: indexSet];
練習:
1.設計一個人類,方法有speak說話,創建一個人對象p1;
設計一個狗類,方法有bark叫,創建一條狗對象d1;
創建一個數組,存儲一個字符串對象,一個人對象,一條狗對象;
通過循環判斷該數組內的元素的類型,
如果是人,調用方法speak;
如果是狗,調用方法bark;
如果是字符串,直接輸出;
2.創建一個數組,NSArray *arr = @[@“1”,@“2”,@“3”,@“4”,@“5”,@“6”,@“7”,@“8”,@“9”,@“10”];
取出該數組中下標能整除3的元素來組成一個新的數組,並且輸出;
===========================
NSArray數組的遍歷
回憶:如何在c語言中遍歷一個數組的所有元素
1、通過下標遍歷數組
for (NSInteger i = 0; i < [arr count]; i++) {
NSLog(@"%@", arr[i]);
}
2、NSEnumerator 枚舉器
1)objectEnumerator消息
作用:正序輸出所有元素
NSEnumerator *enumertor = [arr objectEnumerator];
2)reverseObjectEnumerator消息
作用:逆序輸出所有元素
NSEnumerator *revertor = [arr reverseObjectEnumerator];
3、快速枚舉法
1)for in 語法
for (NSString *s in arr) { // 把arr數組里面每一個對象一個一個地獲取出來;
NSLog(@"%@", s);
}
練習:1.找出數組中長度最長的字符串
2.找出數組中長度最短的字符串
數組的總結:
1,數組也是一個對象 (NSArray類創建數組對象)
2,不可變數組一旦創建,數組的元素個數和元素內容和元素順序都是不可以改變的
3,數組中的元素,可以是任意類型的對象,不單純可以是字符串,包括數組對象, 人對象, 狗對象。。。。。
4,數組中存放的元素是對象的地址
5,數組可以用NSLog(%@)來打印,會打印出數組的每個元素
=====================================
NSMutableArray 和 NSArray (上述講的NSArray的方法,都可以在NSMutableArray對象使用)
NSMutableArray 繼承 NSArray;
1.NSMutableArray的作用 存儲對象; (增刪改)
2.如何創建一個NSMutableArray
1)通過arrayWithCapacity創建
是一個參考容量,數組會根據實際的元素變換長度
2)通過alloc創建
============================
NSMutableArray (增刪改)
1、增加數組元素
添加元素
[arrM addObject:@"lixiaolong"];
從一個數組添加對象
[arrM addObjectsFromArray:@[@"zhangsan", @"lisi", @"laowang"]];
insert****
1)如何插入一個元素
[arrM insertObject:@"zhizhuxia" atIndex:2];
2) 插入多個元素
NSMutableIndexSet *index = [[NSMutableIndexSet alloc] init];//空整數集合對象
[index addIndex:0];
[index addIndex:2];
[index addIndex:3];
[arrM insertObjects:@[@"one", @"two", @"three"] atIndexes:index];
// 對象個數 和 整數個數要一致相等;
2、如何刪除元素 remove*****
1)刪除指定下標的元素
[arrM removeObjectAtIndex:1];
2) 刪除最后一個元素
[arrM removeLastObject];
3)根據指定對象來刪除元素
[arrM removeObject:@"lisi"];
4)在一定范圍刪除指定的元素
[arrM removeObject:@"zhangsan" inRange:NSMakeRange(0, 4)];
5)刪除指定范圍的所有元素:
[arrM removeObjectsInRange:NSMakeRange(3, 2)];
6)根據一個數組刪除指定的元素
[arrM removeObjectsInArray:@[@"1",@"2",@"3", @"one"]];
7)一次性刪除所有指定下標的元素
NSMutableIndexSet *index
[arrM removeObjectsAtIndexes:index];
8)刪除所有元素
[arrM removeAllObjects];
總結:
增: add*****, insert*****
刪: remove*****
練習:
1.創建一個可變數組,數組中包含若干不相同的字符串,要求將指定的字符串刪除
2.創建一個數組,數組中包含若干不相同的字符串,要求將下標整除3 的元素全部刪除
3.先定義一個Person類,包含一個成員變量:no,隨機產生no報數
如果數組中的人的下標能整除報數, 則出列(remove)
arc4random(); // 產生隨機數;
5、交換數組內的兩個元素: exchangeObjectAtIndex: withObjectAtIndex
[arrM exchangeObjectAtIndex:0 withObjectAtIndex:2];
練習:
1.將數組內的元素逆序保存
@[@“1”, @“2”, @“3”, @“4”, @“5”]
@[@“5”,@“4”,@“3”,@“2”,@“1”];
6、替換元素
1)1.替換一個元素replaceObjectAtIndex:withObject:
[arrM replaceObjectAtIndex:0 withObject:@"three"];
2. 替換多個元素 replaceObjectsAtIndexes:withObjects:
[arrM replaceObjectsAtIndexes:index withObjects:@[@"four",@"one"]];
3. setArray:全部修改
[arrM setArray:@[@"fire"]];
總結:
增: add****, insert*****
刪: remove******
改: replace****, exchange**** , set***** (全部改為....)
===========================
字符串的分割與拼接
1.如何分割字符串 "+" “hello_world+ddd”
1)componentsSeparatedByString消息
作用:將字符串按照指定的字符串進行分割
2)componentsSeparatedByCharactersInSet消息
作用:使用指定的NSCharaterSet集合來分割字符串
注意:若分割條件出現在開頭或者結尾,則會出現空串@""
2.NSCharacterSet集合的使用與NSIndexSet的區別
需求:現在需要將一個字符串按照數字分割
1) NSCharacterSet作用
NSCharacterset是無序字符集合,
主要用來判斷已知字符串是否包含制定字符集,而不可以用來保存字符串
2)characterSetWithCharactersInString消息
作用:根據指定字符串中的字符構建一個NSCharaterSet集合
3.字符串拼接
1)componentsJoinedByString消息
作用:每個元素間以指定的字符串進行連接
示例:時間,句子…
練習:
將字符串@ “I am a man” 和 @”You are so good";
組合成@“I You am are a so man good”
===========================
NSNumber的作用
需求:OC的數組無法放入C語言的基本數據類型
作用:把C語言的基本數據類型轉換成NSNumber對象
=============================
8、NSMutableArray數組排序
1)數組排序方法
//按照ASC碼大小進行排序
//提供一個排序的方法,使數組自動按照排序方法的法則進行排序
NSArray *arr1 = [arr sortedArrayUsingSelector:@selector(compare:)];
============================
作業:
1.根據字符串的長度對數組進行排序 (冒泡升序)(選擇降序)
2:創建一個數組,元素是5個Dog 類的對象地址,遍歷數組,是每個元素都執行bark函數
bark函數可以打印出dog 的姓名和年齡
3:創建一個數組,數組中有三個Cat 的對象,有三個Dog 的對象,用三種方式來遍歷數組,如果是Cat 的對象就發送wash 的消息,打印“小貓在洗臉”,如果是Dog 的對象,就給對象發送bark 的消息,打印狗叫聲
4:創建一個Dog的類,重寫類的description方法,打印出一句話